新人求帮助
问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总数为多少?
大家帮忙看看下面的代码哪里有问题,每次运行输入什么数结果都是1.
[解决办法]
这个问题,网上很多办法,我先Copy下方法好了。。
最好用递归解,这道题目考的就是递归
即第三种方法
#include<stdio.h>
void main()
{
int a[100] ,i,n;
printf("请输入月数:\n");
scanf("%d",&n);
a[0]=a[1]=1;
for(i=2;i<n;i++)
a[i]=a[i-1]+a[i-2];
printf("%d\n",a[n-1]);
}
#include<stdio.h>
void main()
{
long f1,f2;
int i,n,m;
f1=f2=1;
printf("输入月数:\n");
scanf("%d",&n);
for(i=3;i<=n;i++)
{
m=f2;
f2+=f1;
f1=m;
}
printf("%d\n",f2);
}
#include <stdio.h>
int rabbit(int n)
{
if (n<=0)
{
printf("error");
return 0;
}
if(n==1
[解决办法]
n==2)
return 1;
if (n>2)
return rabbit(n-1)+rabbit(n-2);
}
void main ()
{
int n;
printf("intput month:\n");
scanf("%d",&n);
n=rabbit(n);
printf("%d\n",n);
}
[解决办法]
做了个递归的。
#include <iostream>
using namespace std;
long long func(int start, int end);
int main()
{
cout << "刚开始有1对小兔子。\n";
cout << "小兔子3个月后,每个月生一对小兔子。\n";
cout << "(第4个月就有2对兔子)\n";
cout << "假设所有兔子不死,那么第N个月共有多少对兔子?\n";
cout << "\n输入结束的月份N(从1月开始):";
unsigned int n;
cin >> n;
if (cin && n > 0)
cout << "\n第" << n << "个月,共有"
<< func(1, n) << "对兔子。\n\n";
else
cout << "输入错误。\n";
system("pause");
return 0;
}
long long func(int start, int end)
{
long long result = 1;
for (int i = start + 3; i <= end; i++)
result += func(i, end);
return result;
}