第一部分
韩信点兵
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。http://www.1234jk.com已知总人数不小于10,不超过100 。
- 输入
输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5 - 输出
输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89
#include<stdio.h>int main(){ int a; int b; int c; int i;
scanf("%d%d%d",&a,&b,&c);
for(i=10;i<=100;i++){ if(i%3==a && i%5==b && i%7==c){ printf("%d\n",i); break;
}
}
if(i==101) printf("No answer\n");
return 0;
}
兰州烧饼
烧饼有两面,要做好一个兰州烧饼,要两面都弄热。当然,一次只能弄一个的话,效率就太低了。有这么一个大平底锅,一次可以同时放入k个兰州烧饼,一分钟能做好一面。而现在有n个兰州烧饼,至少需要多少分钟才能全部做好呢?
- 输入
依次输入n和k,中间以空格分隔,其中1 <= k,n <= 100000 - 输出
输出全部做好至少需要的分钟数 - 提示
如样例,三个兰州烧饼编号a,b,c,首先a和b,然后a和c,最后b和c,3分钟完成
#include<stdio.h>int main(){ int n; int k; int total; int result;
while(scanf("%d%d",&n,&k)!=EOF){
total=n*2;
if(total<k){ //没有考虑到total<k的情况
printf("2\n"); continue;
}
result=total/k;
if(total%k!=0)
result++;
printf("%d\n",result);
}
return 0;
}
进制转换
输入一个十进制数N,将它转换成R进制数输出。
- 输入
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。 - 输出
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
#include<stdio.h>int main(){ int number; int system;
char s[50]; int i; int length; int flag;
while((scanf("%d%d",&number,&system))!=EOF){
i=0;
flag=0;
if(number<0){
number=-number;
flag=1;
}
while(number){ if(number%system<=9){ s[i]=(number%system)+'0';
}
else if(number%system==10) s[i]='A';
else if(number%system==11) s[i]='B';
else if(number%system==12) s[i]='C';
else if(number%system==13) s[i]='D';
else if(number%system==14) s[i]='E';
else if(number%system==15) s[i]='F';
number/=system;
i++;
} length=i;
if(flag==1) printf("-");
for(i=length-1;i>=0;i--) printf("%c",s[i]);
printf("\n");
}
return 0;
}
第几天?
给定一个日期,输出这个日期是该年的第几天。
- 输入
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。 - 输出
对于每组输入数据,输出一行,表示该日期是该年的第几天。
#include<stdio.h>
int main(){ int a; intb; int c; int i; int day[13]; int sum;
day[1]=31;
day[2]=28;
day[3]=31;
day[4]=30;
day[5]=31;
day[6]=30;
day[7]=31;
day[8]=31;
day[9]=30;
day[10]=31;
day[11]=30;
day[12]=31;
while((scanf("%d/%d/%d",&a,&b,&c))!=EOF){
sum=0;
for(i=1;i<=b-1;i++)
sum+=day[i];
sum+=c;
if((a%400==0 || (a%4==0&& a%100!=0)) && b>=3)
sum++;
printf("%d\n",sum);
}
return 0;
}
成绩转换
输入一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;
#include<stdio.h> int main(){ int T; int n; char c;
scanf("%d",&T);
while(T--){ scanf("%d",&n);
if(n>=90)
c='A';
else if(n>=80)
c='B';
else if(n>=70)
c='C';
else if(n>=60)
c='D';
else
c='E';
printf("%c\n",c);
}
return 0;
}