c語言兔子
『壹』 c語言100道題中,兔子生兔子程序怎麼理解
有一對兔子,從出生後第 3 個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
兔子的規律為數列:
1,1,2,3,5,8,13,21....
下面使用了迭代、遞歸和數組三種解法。
【代碼一】使用迭代:
#include<stdio.h>
intmain()
{
longf1=1,f2=1;//兔子的數量
inti;//循環次數
intn;//要計算的月份
printf("輸入要計算的月數:");
scanf("%d",&n);
//計算出循環次數
if(n%2==1){
n=(n+1)/2;
}else{
n=n/2;
}
for(i=1;i<=n;i++){
printf("第%d個月有%d只 ",i*2-1,f1);
printf("第%d個月有%d只 ",i*2,f2);
f1=f1+f2;/*前兩個月加起來賦值給第三個月*/
f2=f1+f2;/*前兩個月加起來賦值給第三個月*/
}
return0;
}
運行結果:
輸入要計算的月數:10
第1個月有1隻
第2個月有1隻
第3個月有2隻
第4個月有3隻
第5個月有5隻
第6個月有8隻
第7個月有13隻
第8個月有21隻
第9個月有34隻
第10個月有55隻
【方法二】使用遞歸:
#include<stdio.h>
intFeibonacci(intn){
if(n==1||n==2)
return1;
else
returnFeibonacci(n-1)+Feibonacci(n-2);
}
intmain(){
intn;//要計算的月份
printf("輸入要計算的月數:");
scanf("%d",&n);
printf("%d個月的兔子總數為%d ",n,Feibonacci(n));
return0;
}
運行結果:
輸入要計算的月數:10
10個月的兔子總數為55
遞歸看上去非常符合邏輯,但是這種遞歸效率是非常慢的,不信你計算20, 30, 40 個月的兔子數試試,明顯比另外兩種方法慢多了,具體分析請看:C語言用遞歸求斐波那契數,讓你發現遞歸的缺陷和效率瓶頸
【代碼三】使用數組
#include<stdio.h>
voidmain()
{
inta[100],i,n;
printf("請輸入月數:");
scanf("%d",&n);
a[0]=a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-1]+a[i-2];
printf("第%d個月的兔子為:%d ",n,a[n-1]);
}
運行結果:
請輸入月數:10
第10個月的兔子為:55
『貳』 C語言編程 兔子鴿子問題
判斷error的情況有問題。其實這題列出公式就可以解答了:
設x只鴿子,已知兔子,則:
x+y=n;
2x+4y=m;
解得:x=2n-m/2,y=m/2-n。
因為x,y都是非負整數,所以 m/2 必須是一個整數,也就是m必須是偶數。同時:
x=2n-m/2>=0,解得4n>=m;
y=m/2-n>=0,解得m>=2n;
因此 2n<=m<=4n,且m是偶數。這就是判斷是否「Error」的條件。
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned int n,m;
while(scanf("%d%d",&n,&m)&&!(m==0&&n==0))
{
if(m%2!=0 || m<2*n || m>4*n)
printf("Error\n");
else
printf("%d %d\n",(2*n-m/2),(m/2-n));
}
return 0;
}
『叄』 C語言 兔子的繁殖問題(注意,就是按題目樣例要求輸入然後輸出,要一樣)
#include<stdio.h>
int main()
{
int a[50];
int i,t,n;
a[0]=1;
a[1]=1;
for(i=2;i<50;i++)
a[i]=a[i-1]+a[i-2];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d\n",a[n]);
}
return 0;
}
『肆』 c語言:兔子繁殖問題
兔子的對數,就是Fibonacci數列
#include <stdio.h>
long f(long n)
{
if(n<3) return 1;
else return f(n-2)+f(n-1);
}
void main()
{
printf("一年後,有兔子%ld對.\n", f(12));
getch();
}
---------------------------------------------------------
1 1 2 3 5 8 13 21 34 55 89 ...
『伍』 兔子繁殖,C語言
#include<stdio.h>
intmain(void)
{
intn,i,a,b,c;
a=0;
b=1;
i=1;
printf("請輸入兔子對數n=");
scanf("%d",&n);
while(b<n){
c=a+b;/*while裡面一次循環是1個月*/
a=b;
b=c;
i++;
}
printf("至少%d月",i);
return0;
}