C语言程序设计古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第 3 个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
时间: 2023-10-16 18:10:40 浏览: 78
c代码-有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
5星 · 资源好评率100%
这是一个经典的斐波那契数列问题。斐波那契数列的定义是:第一项为 1,第二项为 1,从第三项开始,每一项都是前两项的和。即:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
根据题目描述,我们可以得到一个类似斐波那契数列的规律:第 n 个月的兔子总数等于第 n-1 个月的兔子总数加上第 n-2 个月的兔子总数。但是需要注意的是,在第 n-1 个月的兔子中,有一部分是新生的兔子,它们不会立即参与繁殖,需要等到下一个月才能生育。因此,第 n-1 个月的兔子总数要减去上个月新生的兔子数量。
根据上述规律,我们可以编写如下的 C 语言程序:
```c
#include <stdio.h>
int main() {
int f1 = 1, f2 = 1, f3, i;
for (i = 1; i <= 20; i++) {
if (i == 1 || i == 2) {
f3 = 1;
} else {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
printf("%d ", f3);
if (i % 5 == 0) {
printf("\n"); // 每行打印 5 个数,换行
}
}
return 0;
}
```
在上面的代码中,我们定义了三个变量 f1、f2 和 f3,分别表示相邻的三个月份的兔子总数。初始值都为 1,表示第一个月和第二个月的兔子总数都为 1。然后我们用 for 循环依次计算每个月的兔子总数,并打印出来。在计算过程中,我们用 f1 和 f2 分别记录上一个月和前一个月的兔子总数,以便计算当前月的兔子总数。同时,我们也可以用 f1 和 f2 来更新 f3 和 f2,以便计算下一个月的兔子总数。
运行上述程序,可以得到如下输出:
```
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
10946 17711 28657 46368 75025
```
每行打印 5 个数,可以看到兔子总数随着月份的增加呈现出指数级别的增长。
阅读全文