问题:有一对兔子,从出生后的第3个月起每个月都生一对兔子。
小兔子长到第3个月后每个月又生一对兔子,假设所有的
兔子都不死,问30个月内每个月的兔子总数为多少?
解题过程:
首先就是画图:
根据上图的解决思路来编写代码:
#include"stdio.h"
#define row 31
#define col 5
// 初始化数组
void Init(long long arr[row][col], int R, int C)
{
// 把第一个月的小兔,中兔,老兔初始化为1,0,0
long long a = 1;
arr[1][1] = a;
arr[1][2] = 0;
arr[1][3] = 0;
// 第一列初始化为月份
long long i = 0;
for (i = 1; i < R; i++)
{
arr[i][0] = i;
}
}
// 打印数组
void Dayin(long long arr[row][col], int R, int C)
{
int i = 0, j = 0;
for (i = 1; i < R; i++)
{
printf("第%3ld个月: 小兔:%7ld只 中兔:%7ld只 老兔:%7ld只 总数:一共%7ld只\n\n\n", (long long)arr[i][0], (long long)arr[i][1], (long long)arr[i][2], (long long)arr[i][3], (long long)arr[i][4]);
}
}
//计算数组的每一个值
void JiSuan(long long arr[row][col], int R, int C)
{
int i = 2;
for (i = 2; i < R; i++)
{
long long XT = arr[i - 1][3]; // 小兔=上一行的老兔的只数
long long ZT = arr[i - 1][1]; // 中兔=上一行的小兔的只数
long long LT = arr[i - 1][2] + arr[i - 1][3]; // 老兔=上一行的中兔+上一行的老兔
long long ZS = XT + ZT + LT; // 总数= 小兔+中兔+老兔
// 把这一行的小兔,中兔,老兔,总数的值填上
arr[i][1] = XT;
arr[i][2] = ZT;
arr[i][3] = LT;
arr[i][4] = ZS;
}
}
int main()
{
long long arr[row][col] = { 0 };
//初始化数组
Init(arr, row, col);
//计算数组的每一个值
JiSuan(arr, row, col);
// 打印数组
Dayin(arr, row, col);
return 0;
}
最后的结果:
现在感觉所有的问题都要画图,通过画图先把自己的思路理清了,剩下的写代码就是非常轻松的一件事了,好了,今天的学习到此结束!其实这道题昨天就考虑了,没有把图画出来,进过晚上的思考,今天终于完成了!还是有点小激动的,因为解决的问题越来越复杂了!