7-36 韩信点兵 (10 分)
在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:
按从1至5报数,记下最末一个士兵报的数为1;
再按从1至6报数,记下最末一个士兵报的数为5;
再按从1至7报数,记下最末一个士兵报的数为4;
最后按从1至11报数,最末一个士兵报的数为10;
请编写程序计算韩信至少有多少兵。
输入格式:
本题无输入
输出格式:
输出韩信至少拥有的士兵人数。
#include <stdio.h>
int main()
{
int i;
for(i=1;;i++){
if((i%5==1)&&(i%6==5)&& (i%7==4)&&(i%11==10)){
printf("%d",i);
return 0;
}
}
}
7-37 输出整数各位数字 (15 分)
本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。
输入格式:
输入在一行中给出一个长整型范围内的非负整数。
输出格式:
从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。
输入样例:
123456
输出样例:
1 2 3 4 5 6
#include <stdio.h>
int main()
{
char c;
do{
scanf("%c",&c);
if(!(c>='0'&&c<='9')){//利用最后输入的回车键也会被看做字符被scanf读取的特点跳出循环。
break;
}
printf("%c ",c);
}while(c>='0'&& c<='9');
return 0;
}
7-38 支票面额 (15 分)
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?
输入格式:
输入在一行中给出小于100的正整数n。
输出格式:
在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution。
输入样例1:
23
输出样例1:
25.51
输入样例2:
22
输出样例2:
No Solution
#include <stdio.h>
int main()
{
int f,y,n,cont=0;
scanf("%d",&n);
for(f=0;f<100&&cont !=1;f++){
for(y=0;y<100;y++){
if(98*f-199*y==n){
printf("%d.%d",y,f);
cont=1;
break;
}
}
}
if(cont==0){
printf("No Solution\n");
}
return 0;
}
解析:
根据题目可以列出以下式子:
100f+y-n=200y+f
即: 98f-199y=n
∵f<100 && n>0
∴f<100; y<=49
注意: y、f都必须取到0,因为当n=0时,y、f都为0,此时是满足题目要求的。
7-39 龟兔赛跑 (20 分)
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@@,兔子赢输出_,平局则输出--;后跟1空格,再输出胜利者跑完的距离。
输入样例:
242
输出样例:
@_@ 726
#include <stdio.h>
int main()
{
int T,g,r=0,i;
scanf("%d",&T);
for(i=1;i<=T;i++){
g=3*i;
r=r+9;
if(i%10==0){
if(r>g){
i=i+30;
}
}
}
g=3*T;
if(g>r){
printf("@_@ %d",g);
}else if(g<r){
printf("^_^ %d",r);
}else{
printf("-_- %d",r);
}
return 0;
}
7-40 到底是不是太胖了 (10 分)
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
输入格式:
输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。
输出格式:
为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!。
输入样例:
3
169 136
150 81
178 155
输出样例:
You are wan mei!
You are tai shou le!
You are tai pang le!
#include <stdio.h>
#include <math.h>
int main()
{
int h[20]={0},w[20]={0},b[20]={0},i,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d %d",&h[i],&w[i]);
b[i]=(h[i]-100)*2*0.9;
if(abs(w[i]-b[i])<(b[i]*0.1)){
printf("You are wan mei!\n");
}else if(abs(w[i]-b[i])>=(b[i]*0.1)&&(w[i]>b[i])){
printf("You are tai pang le!\n");
}else{
printf("You are tai shou le!\n");
}
}
return 0;
}