1、兔子繁衍问题
题目:一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
代码1:
#include<stdio.h>
int main()
{
int i,n,x1,x2,x,s;
scanf("%d",&n);
if(n==1){
x=1;
}
else{
x1=1,x2=1,s=0,x=2;
while(s<n){
x++;
s=x1+x2;
x1=x2;
x2=s;
}
}
printf("%d",x);
return 0;
}
2、水仙花数
题目:水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
代码1:
#include<stdio.h>
int main()
{
int n,i=1,temp=1;
scanf("%d",&n);
while(i<n){
temp*=10;
i++;
}
i=temp;
while(i<temp*10){
int t=i,sum=0;
do{
int d=t%10;
t/=10;
int p=1;
int a=0;
while(a<n){
p*=d;
a++;
}
sum+=p;
}while(t>0);
if(sum==i){
printf("%d\n",i);
}
i++;
}
return 0;
}
代码2:
#include<stdio.h>
int ipow(int n,int m);
int main(void)
{
int n,a,item,i,sum;
scanf("%d",&n);
for(i = ipow(10,n-1);i < ipow(10,n);i++)
{
sum = 0;
item = i;
while(item != 0)
{
a = item%10;
item = item/10;
sum = sum+ipow(a,n);
}
if(sum == i)
printf("%d\n",i);
}
return 0;
}
int ipow(int n,int m)
{
int item = 1,i;
for(i = 1;i <= m;i++)
{
item = item*n;
}
return item;
}