|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
这题用C或者C++怎么做
这是一个经典的兔子繁殖问题,可以使用递归或循环来解决。
首先,我们可以观察到兔子的繁殖规律是每个月都会繁殖出前两个月兔子的数量之和。
假设第n个月的兔子总数为f(n),那么根据规律,我们可以得到递推公式:
f(n) = f(n-1) + f(n-2)
初始条件是第1个月和第2个月的兔子总数均为1,即:
f(1) = f(2) = 1
接下来,我们可以使用循环来计算兔子总数达到N所需的最少月数。
首先,我们定义两个变量a和b,分别表示当前月份和上个月份的兔子总数。初始时,a和b都为1。
然后,我们使用一个循环,从第3个月开始,每次更新a和b的值,直到兔子总数达到或超过N。
具体的循环过程如下:
1. 初始化a和b为1,计数器month为2。
2. 进入循环,每次循环开始时,将a和b的值相加,得到新的兔子总数。
3. 如果新的兔子总数大于等于N,跳出循环。
4. 如果新的兔子总数小于N,将b的值赋给a,将新的兔子总数赋给b,month加1。
5. 重复步骤2到步骤4,直到兔子总数达到或超过N。
6. 循环结束后,输出month的值,即为兔子总数达到N所需的最少月数。
以下是用C++实现的代码示例:
- #include <iostream>
- using namespace std;
- int main() {
- int N;
- cin >> N;
-
- int a = 1, b = 1;
- int month = 2;
-
- while (b < N) {
- int tmp = a + b;
- a = b;
- b = tmp;
- month++;
- }
-
- cout << month << endl;
-
- return 0;
- }
复制代码
希望这个解答对你有帮助!如果有任何疑问,请随时提问。
|
|