小白又来提问了。这次是关于循环的实现问题。

如题:美国人口调查局基于以下假设进行人口估算‘
1:每7秒一个人诞生
2:每13秒一个人死亡
3:每45秒一个移民迁入;
编程显示未来五年每年的人口数量。
假设目前人口是312032486人。每年以365天计算;

这道题除了老老实实的逐年计算可不可以用循环来实现呢?苦思不得解。求大神指点啊

这道题当然可以用循环来计算啊~你等等,我用C语言试着来实现一下~

这肯定不能用循环吧按秒计算5*365*24*3600单位循环吃不消

7、13、45的最小公倍数4095,出生:585,死亡:315,移民:91,所以净增长:361,
5年共:157680000,共38505.4549,所以共有38505.4549*361=13900483

我想到了。每年增长量是一定的,基本量也是一定的。第一年的人口等于基本量加上增长量。第二年的人口等于基本量加上增长量乘以2.以后以此类推就可以用for循环来解决这个问题了。谢谢大家的关注。

 #include "stdafx.h"
#include "stdio.h"

#define YEAR 365

int main(int argc, char* argv[])
{
    int p_ini = 312032486;  
    int num = 5; //5 years

    int life = 7*13+13*45-7*45; 
    int per_time = 7*13*45;
    int count = (60*60*24*YEAR*num)/per_time;
    int total;
    total =  p_ini + life * count;                 //First way to calculate
    printf("First method:population = %d\n",total);

    int i,second;
    int add = 0;
    int born,dead,mig;
    for(second = 0;second < 60*60*24*YEAR*num;second++) {  //Second way to calculate
        if(second % 7 == 0)
            born = 1;
        if(second % 13 == 0)
            dead = 1;
        if(second % 45 == 0)
            mig = 1;
        add += born - dead +mig;
        born = dead = mig = 0;
    }
    printf("Second method:population is %d\n",p_ini + add);  //The second way is more accurate
    return 0;
}

图片说明

其实一开始感觉数据量会很大,不过毕竟不是斐波那契增长,所以程序运行出来我还不太相信呢~

这个问题还要考虑的一个地方是5年的时间并不是所有数的整数倍,因此,要计算最接近整数倍时间里的净增长人口,然后再根据剩余的时间计算这个时间段内的净增长人口。