c语言编程一对新出生的兔子,C语言兔子生兔子的问题(3中解法)
有一對兔子,從出生后第 3 個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
兔子的規律為數列:1, 1, 2, 3, 5, 8, 13, 21 ....
下面使用了迭代、遞歸和數組三種解法。
【代碼一】使用迭代:
#include
int main()
{
long f1=1, f2=1; // 兔子的數量
int i; // 循環次數
int n; // 要計算的月份
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只\n", i*2-1, f1);
printf("第%d個月有%d只\n", i*2, f2);
f1=f1+f2; /*前兩個月加起來賦值給第三個月*/
f2=f1+f2; /*前兩個月加起來賦值給第三個月*/
}
return 0;
}
運行結果:
運行結果:
輸入要計算的月數:10
第1個月有1只
第2個月有1只
第3個月有2只
第4個月有3只
第5個月有5只
第6個月有8只
第7個月有13只
第8個月有21只
第9個月有34只
第10個月有55只
【方法二】使用遞歸:
#include
int Feibonacci(int n){
if(n==1||n==2)
return 1;
else
return Feibonacci(n-1)+Feibonacci(n-2);
}
int main(){
int n; // 要計算的月份
printf("輸入要計算的月數:");
scanf("%d", &n);
printf("%d個月的兔子總數為%d\n", n, Feibonacci(n));
return 0;
}
運行結果:
輸入要計算的月數:10
10個月的兔子總數為55
遞歸看上去非常符合邏輯,但是這種遞歸效率是非常慢的,不信你計算20, 30, 40 個月的兔子數試試,明顯比另外兩種方法慢多了,具體分析請看:C語言用遞歸求斐波那契數,讓你發現遞歸的缺陷和效率瓶頸
【代碼三】使用數組:
#include
void main()
{
int a[100] ,i,n;
printf("請輸入月數:");
scanf("%d",&n);
a[0]=a[1]=1;
for(i=2;i
a[i]=a[i-1]+a[i-2];
printf("第%d個月的兔子為:%d\n", n, a[n-1]);
}
運行結果:
請輸入月數:10
第10個月的兔子為:55
總結
以上是生活随笔為你收集整理的c语言编程一对新出生的兔子,C语言兔子生兔子的问题(3中解法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团春招笔试题
- 下一篇: 格式化代码_格式化代码是什么意思