sum=sum+temp; }
printf(\
return 0; }
5.换硬币。将一笔零钱(大于8分,小于1元,精确到分)换成5分、2分和1分的硬币,每种硬币至少有一枚。输入金额,问有哪几种换法?针对每一种换法,输出各种面额硬币的数量和硬币的总数量。试编写相应程序。 解答:
#include
int money,money1,money2,sum;
printf(\ scanf(\ sum=0;
for(money1=1;money1<=8;money1++)
for(money2=1;money2<=3;money2++) if(money1+money2*2+5==money) { sum=money1+money2+1; if(money2>money1)
printf(\
oney1,money2,sum);
else
printf(\
oney2,money1,sum); }
return 0; }
6.输出水仙花数。输入一个正整数n(3≤n≤7)输出所有n位水仙花数。水仙花数是指一个n位正整数,它各位数字的n次幂之和等于它本身。例如 153 的各位数字的立方和是 :13+53+33=153。试编写相应程序。 解答:
#include
int n,i,t,m,sum,j,k;
printf(\ scanf(\ for(j=0,i=1;i<=n;i++)
j=j*10+9;
for(k=1,i=1;i for(;k<=j;k++){ t=k; sum=0; while(k!=0){ m=k; k=k; sum=sum+pow(k,n); k=m/10; } k=t; if(sum==t) printf(\ } return 0; } 7.求最大公约数和最小公倍数。输入两个正整数m和n(m≤1000,n≤1000),求其最大公约数和最小公倍数。试编写相应程序。 解答: #include int m,n,j,k; do{ printf(\ scanf(\ printf(\ scanf(\ }while(m<0||n<0); j=m; while(j%n!=0) j=j+m; k=(m*n)/j; printf(\最小公倍数是%d,最大公约数是%d\\n\ return 0; } 8.高空坠球。皮球从height(米)高度自由落下,触地后反弹到原高度的一半,再落下,再反弹……如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?输出保留1位小数。试编写相应程序。 解答: #include int main(void) { double distance, height; int i, n; printf(\ scanf(\ printf(\ scanf(\ if(n == 0) distance = 0; else { for(int i = 1; i <= n; i++){ height = height/2; distance += 3*height; } } printf(\第%d次落地时,共经过距离为%0.1lf.\\n\ printf(\第%d次落地后的反弹高度为%0.1lf.\\n\ return 0; } 9.打菱形星号“*”图案。输入一个正整数n(n为奇数),打印一个高度为n的“*”菱形图案。例如,当n为7时,打印出以下图案。试编写相应程序。 * * * * * * * * * * * * * * * * * * * * * * * * * 解答: #include int i,j,n; printf(\ scanf(\ for(i=1;i<=n;i=i+2){ for(j=1;j<=n-i;j++) printf(\ for(j=1;j<=i;j++) printf(\ putchar('\\n'); } for(i=1;i<=n-2;i=i+2){ for(j=1;j<=i+1;j++) printf(\ for(j=1;j<=n-i-1;j++) printf(\ putchar('\\n'); } return 0; } 或 #include int i,j,n; printf(\ scanf(\ for(i=1;i<=n;i++){ for(j=1;j<=fabs(n+1-2*i)/2;j++) printf(\ for(j=1;j<=n-fabs(n+1-2*i);j++) printf(\ putchar('\\n'); } return 0; } 10.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第n天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少桃子?试编写相应程序。(提示:采取逆向思维的方法,从后往前推断。) 解答: #include int i, peach; peach = 1; for(i = 1; i < n; i++){ peach = 2 * peach + 1; } printf(\ return 0; } 11. 兔子繁衍问题。一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到n对?输入一个不超过10000的正整数n,输出兔子总数达到n最少需要的月数。试编写相应程序。 解答: #include int n,mouth,x1=1,x2=1,x; printf(\ scanf(\ mouth=1; x=0; while(x<=n){ x=x1+x2; x1=x2; x2=x; mouth++; } printf(\ return 0; }