如题:美国人口调查局基于以下假设进行人口估算‘
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年的时间并不是所有数的整数倍,因此,要计算最接近整数倍时间里的净增长人口,然后再根据剩余的时间计算这个时间段内的净增长人口。