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;
}