8.1 水仙花数(153=1³+5³+3³)
#include <stdio.h>
int main() {
int i,m,n,s;
for(i=99;i<=999;i++){
m=i/100;
n=i%100/10;
s=i%10;
if(i==m*m*m+n*n*n+s*s*s)
printf("%d+%d+%d=%d\n",m,n,s,i);
}
return 0;
}
8.2 完数(6=1+2+3,1,2,3为6的因子)
#include <stdio.h>
int main() {
int i,j,sum=0;
for(i=2;i<=1000;i++){
for(j=1;j<i;j++){
if(0==i%j){
sum +=j;
}
}
if(sum==i){
printf(" %d 的完数 ",sum);
for(j=1;j<i;j++){
if(0==i%j){
printf("%d ",j);
}
}
printf("\n");
}
sum=0;
}
return 0;
}
8.3有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13····· 求这个数列的前20项之和
#include <stdio.h>
int main() {
int i;
double m=2.0,n=1.0,temp,sum=0.0;
for(i=1;i<=20;i++){
sum +=m/n;
temp=m;
m +=n;
n=temp;
}
printf("%.4lf",sum);
return 0;
}
8.4 一个球从100m高度自由落体,每次落地后跳原高度的一半,再落下,再反弹。求它再第10落地时,经过多少米,第10次反弹多高
#include <stdio.h>
int main() {
int i,m=10;
double s,n=100.0;
for(i=1;i<=m;i++){
n /=2;
s +=n;
}
printf("总共经过%.2lf,第%d次反弹%.2lf",s,m,n);
return 0;
}
8.5 猴子吃桃问题
方式一:循环
#include <stdio.h>
int main() {
int i,n=1;
for(i=9;i>0;i--){
n =2*(n+1);
}
printf("总桃子为:%d ",n);
return 0;
}
方式二:递归
#include <stdio.h>
int main() {
int fac(int n);
int n,y;
printf("输入要求的天数n=");
scanf("%d",&n);
y=fac(n);
printf("第%d天前的桃子为:%d",n,y);
return 0;
}
int fac(int n){
int f;
if(n<0)printf("错误\n");
else if(n==0||n==1)f=1;
else f=(fac(n-1)+1)*2;
return(f);
}