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