习题2-1 水仙花数(daffodil)
题目:输出100-999中的所有水仙花数。若3位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数。例如153=1^3+5^3+3^3,所以153是水仙花数。
题解:
#include<stdio.h>
int main()
{
int a,b,c,n;
for(n = 100;n < 1000;n++){
a = n / 100;
b = n % 100 / 10;
c = n % 10;
if(n == a * a * a + b * b * b + c * c * c)
printf("水仙花数 = %d\n",n);
}
return 0;
}
运行结果:
习题2-2 韩信点兵(hanxin)
题目:相传韩信才智过人,从不会直接清点自己军队的人数,只要让士兵先后三人一排、五人一排、七人一排的变换队形,而他每次只掠一眼排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100,输入到文件结束为止。
样例输入:
2 1 6
2 1 3
样例输出:
case 1:41
case 2:No answer
题解:
#include<stdio.h>
int main()
{
int a,b,c,n,i = 1;
scanf("%d%d%d",&a,&b,&c);
for(n = 10;n < 101;n++){
if(n % 3 == a && n % 5 == b && n % 7==c){
i = 0;
break;
}
}
if(i){
printf("No answer\n");
}else{
printf("总人数 = %d\n",n);
}
return 0 ;
}
习题2-3 倒三角形(triangle)
题目:输入正整数n<=20,输出一个n层的倒三角形,例如n=5时输出如下:
#########
#######
#####
###
#
题解:
#include<stdio.h>
int main()
{
int n,i,k,j;
scanf("%d",&n);
if(n > 0 && n <= 20){
for(i = n;i > 0;i--){
for(k = n - i;k > 0;k--){
printf(" ");
}
for(j = 0;j < 2 * i - 1;j++){
printf("#");
}
printf("\n");
}
}
return 0;
}
习题2-4 子序列的和(subsequence)
题目:输入两个正整数n<m<10^6,输出1/n^2+1/(n+1)^2+........+1/m^2,保留5位小数。输入包含多组数据,结束标记为n=m=0.
样例输入:
2 4
65536 655360
0 0
样例输出:
case 1:0.42361
case 2:0.00001
题解:
#include<stdio.h>
int main()
{
int n,m;
double sum = 0.0;
scanf("%d%d",&n,&m);
if(n < m < 1e+6){
for( ;n <= m;n++){
sum += (double)((1.0/n)*(1.0/n));
if(n == 0 && m == 0){
break;
}
}
printf("%.5f\n",sum);
}
return 0;
}