C语言解决兔子出生的问题(小有难度)!

问题:有一对兔子,从出生后的第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;
}

最后的结果:

现在感觉所有的问题都要画图,通过画图先把自己的思路理清了,剩下的写代码就是非常轻松的一件事了,好了,今天的学习到此结束!其实这道题昨天就考虑了,没有把图画出来,进过晚上的思考,今天终于完成了!还是有点小激动的,因为解决的问题越来越复杂了!

猜你喜欢

转载自blog.csdn.net/xingyuncao520025/article/details/131339556