A 年龄
今天蒜头君带着花椰妹和朋友们一起聚会,当朋友们问起年龄的时候,蒜头君打了一个哑谜(毕竟年龄是女孩子的隐私)说:“我的年龄是花椰妹年龄个位数和十位数之和的二倍”。
花椰妹看大家一脸懵逼,就知道大家也不知道蒜头君的年龄,便连忙补充道:“我的年龄是蒜头君个位数和十位数之和的三倍”。
请你计算:蒜头君和花椰妹年龄一共有多少种可能情况?
提醒:两位的年龄都是在 [10,100)[10,100) 这个区间内。
#include<stdio.h>
int main()
{
int a,b,c,d,x,y;
int i,j,t=0;
for(i=1;i<10;i++)
{
for(j=0;j<10;j++)
{
x=i*10+j;
y=2*(i+j);
if(x==3*((y/10)+(y%10))) t+=1;
}
}
printf("%d",t);
return 0;
}
暴力出奇迹。
B 开关灯
蒜头君今天回到了老家的大宅院,老家的灯还是那中拉线的灯(拉一次为亮,再拉一次就灭),蒜头君觉得无聊。把 10001000 盏灯 33 的倍数拉了一次,55 的倍数拉了一次,7的倍数拉了一次(灯得的编号从 1-10001−1000,灯的初始状态都是亮的)。这个时候蒜头君在想还剩下几盏灯还在亮着?
提示:请不要输出多余的符号。
#include<stdio.h>
int main()
{
int i,t=0;
for(i=1;i<1001;i++)
{
if(i%3==0&&i%5!=0&&i%7!=0) t+=1;
if(i%5==0&&i%3!=0&&i%7!=0) t+=1;
if(i%7==0&&i%5!=0&&i%3!=0) t+=1;
if(i%3==0&&i%5==0&&i%7==0) t+=1;
}
printf("%d",1000-t);
return 0;
}
C 全排列
相信大家都知道什么是全排列,但是今天的全排列比你想象中的难一点。我们要找的是全排列中,排列结果互不相同的个数。比如:aab 的全排列就只有三种,那就是aab,baa,aba。
代码框中的代码是一种实现,请分析并填写缺失的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1000
char str[N], buf[N];
int vis[N], total, len;
void arrange(int num) {
int i, j;
if (num == len) {
printf("%s\n", buf);
total++;
return;
}
for (i = 0; i < len; ++i) {
if (!vis[i]) {
for (j = i + 1; j < len; ++j) {
if (str[i] == str[j] && vis[j]) {//这里是填写的代码
break;
}
}
if (j == len) {
vis[i] = 1;
buf[num] = str[i];
arrange(num + 1);
vis[i] = 0;
}
}
}
}
int main() {
while (~scanf("%s", str)) {
len = strlen(str);
int i, j;
for (i = 0; i < len; ++i) {
for (j = i + 1; j < len; ++j) {
if (str[i] > str[j]) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
}
total = 0;
buf[len] = '\0';
arrange(0);
printf("Total %d\n", total);
}
return 0;
}
D 数列求值
#include<stdio.h>
double a[1005];
int main()
{
int n;
double an1,c;
scanf("%d",&n);
scanf("%lf%lf",&a[0],&an1);
a[1]=0;
for(int i=2;i<=n+1;i++)
{
scanf("%lf",&c);
a[i]=2*a[i-1]-a[i-2]+2*c;
}
printf("%.2f\n",(an1-a[n+1])/(n+1));
return 0;
}