兔子产子问题

发布时间 2023-04-12 11:21:38作者: 不如喝点

兔子产子问题:

有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总数为多少?

根据题意列出表格:

根据表格分析出第一,二月兔子总数为1,从第三月开始兔子总数等于该月前面两个月兔子总数之和。

解题思路:

运用数组的知识,给a[1]以及a[0]赋值,利用a[i]=a[i-1]+a[i-2]算出每个月的总数,数组的下表等于月数减1,按照规定的格式输出每月的总数即可。

代码:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int a[30]={1,1};\\前两个月总数赋值

    cout<<setw(12)<<a[0]<<setw(12)<<a[1];\\按格式输出前两个月总数

    int temp=2;\\记录数据来输出换行

    for(int i=2;i<30;i++)\\根据前两个月总数求每月总数

    {

        a[i]=a[i-1]+a[i-2];

        temp++;

        cout<<setw(12)<<a[i];

        if(temp%4==0)

        {

            cout<<endl;

            temp=0;

        }

    }

    return 0;

}

 

解题思路:

利用迭代法求出每个月的总数并直接输出

代码:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int f1=1,f2=1,f;

    cout<<setw(12)<<f1<<setw(12)<<f2;

    for(int i=3;i<31;i++)

    {

        f=f1+f2;

        cout<<setw(12)<<f;

        f1=f2;

        f2=f;

        if(i%4==0)

        cout<<endl;

    }

    return 0;

}

 

拓展:

仅利用f1与f2来储存月份的兔子总数

代码:

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

    int f1=1,f2=1;

    for(int i=1;i<16;i++)

    {

        cout<<setw(12)<<f1<<setw(12)<<f2;

        f1=f1+f2;

        f2=f1+f2;

        if(i%2==0)

        cout<<endl;

    }

    return 0;

}

 

该题体会:利用数组可以储存数据在需要时利用,学会了迭代法的利用以及如何改善迭代法