(人口估算) 美国人口调查局基于以下假设进行
口估算:
每7秒有一个人诞生
每13秒有一个人死亡
·每45秒有一个移民迁人
编写一个程序,显示未来5年的每年人口数。假设
当前的人口是312032486,每年有365天
提示:Java中,整个整数相除,结果还是整数,小数部分被
去掉。例如,5/4等于1(而不是1.25),10/4是2(而不
是2.5)。如果想得到小数部分的精确结果,进行除法运算
的两个数之一必须一个具有小数点的数值。例如,5.0/4等
于1.25.10/4.0等于2.5
你可以直接算一年净增或减多少人口。例如7,13,45的最小公倍数为71345=4095。
那么出生了1345人,死亡了745人,迁入了7*13人。可以算得4095秒净增或减了多少人。然后看一年有多少个4095,最后算余数时间内增减了多少人。结果就是一年后的人数。
两年后的人数的话看两年有多少个4095,然后算余数。这样处理应该会比在一年的结果上算简单。
当然也可以用一个计数器进行模拟计算。计数器从0开始,每过7秒人口加一,每过13秒人口减一
这个可以用一个变量不断地加一代表时间系统,然后代码应该是这样的:
public class people{
public static void main(String[] args) {
Long i = 0L;
//初始时间为0S
Long d = 0L;
//初始人数时间为0,这个单独为计算出生人数准备
Long d1 = 0L;
//初始死亡人数,这个单独为计算死亡人数准备
Long d2 = 0L;
//初始移民时间,这个单独为计算移民人数准备
Long po = 312032486L;
//初始人数为312032486
byte r = 0;
//触发whlie循环用的,本质上就这一个作用。其变量值后面不会修改
Long xiaoshi = 0L;
//后期计算年份用的
byte nian = 0;
while(r==0)
{
i=i+1;
d=d+1;
d1=d1+1;
d2=d2+1;
if (d/7>0){
//此时时间来到7S,我们把计算人数的时间清零,并把人数加一
d = d*0;
po=po+1;
}
if (d1/13>0){
//此时时间来到13S,我们将人数减一,并把计算死亡人数的时间清零
d1 = d1*0;
po = po-1;
}
if (d2/45>0){
//此时时间来到45S,我们将人数加一,模拟迁民过来的人数,并将时间清零
d2 = d2*0;
po=po+1;
}
if (i/3600>0){
//此时时间已经过去1小时,我们汇报当前人数,并创建一个新值,代表小时。
++xiaoshi;
System.out.println("当前时间:"+xiaoshi);
System.out.println("当前人数:"+po);
if (xiaoshi/8760>0){
//一年有365x24=8760小时。当满足此条件时,我们将年份加1
nian=(byte) (nian+1);
if (nian==5){
//当年份等于5时,程序运行结束,汇报当前人数
System.out.println("程序运行结束,5年已模拟完成,当前人数:"+po);
System.out.println("本代码由CSDN@CTimet编写,感谢使用");
++r;//使R=1,不继续运行下一次循环
}
}
}
}
}
}
/**
* 本代码由CSDN@CTimet编写
*/
我试着运行了一下,结果显示最后美国5年增加了1000多人,我感觉不太对,但程序没错,按照你的数据做的,可能美国确实少人吧哈哈哈
你好,我之前在你这里发布了一段代码,后来根据别人的提示发现了代码BUG,于是我重新编辑了代码,新的代码如下:
public class people{
public static void main(String[] args) {
Long i = 0L;
//初始时间为0S
Long d = 0L;
//初始人数时间为0,这个单独为计算出生人数准备
Long d1 = 0L;
//初始死亡人数,这个单独为计算死亡人数准备
Long d2 = 0L;
//初始移民时间,这个单独为计算移民人数准备
Long po = 312032486L;
Long po1 = 312032486L;
//初始人数为312032486
//记录数据po1,该数据为后期计算多了多少人使用,变量值后期不会改变
byte r = 0;
//触发whlie循环用的,本质上就这一个作用。其变量值后面会进行修改用以关闭whlie循环
Long xiaoshi = 0L;
//后期计算年份用的
byte nian = 0;
//年
Long tian = 0L;
//天
while(r==0)
{
i=i+1;
d=d+1;
d1=d1+1;
d2=d2+1;
if (d/7>0)
{
//此时时间来到7S,我们把计算人数的时间清零,并把人数加一
d = d*0;
po=po+1;
}
if (d1/13>0)
{
//此时时间来到13S,我们将人数减一,并把计算死亡人数的时间清零
d1 = d1*0;
po = po-1;
}
if (d2/45>0)
{
//此时时间来到45S,我们将人数加一,模拟迁民过来的人数,并将时间清零
d2 = d2*0;
po=po+1;
}
if (i/3600>0){
//此时时间已经过去1小时,我们汇报当前人数,并把小时加1,清零秒
++xiaoshi;
i = i * 0;
System.out.println("当前时间:第"+ nian +"年-"+tian+"天-"+xiaoshi+"小时");
System.out.println("当前人数:"+po);
if (xiaoshi/24>0)
{
++tian;
xiaoshi = xiaoshi * 0;
//清空小时,避免BUG
//汇报当天人数
if (tian/365>0)
{
tian = tian*0;
//清空天数,防止出BUG
++nian;
}
}
if (nian==5)
{
//当年份等于5时,程序运行结束,汇报当前人数
Long po2 = po - po1;
System.out.println("程序运行结束,5年已模拟完成,当前人数:"+po);
System.out.println("预计5年内增长人数:"+po2);
System.out.println("本代码由CSDN@CTimet编写,感谢使用");
++r;//使R=1,不继续运行下一次循环
}
}
}
}
}
/**
* 本代码由CSDN@CTimet编写
*/
这次的代码运行结果为5年后美国增加了13900484人,应该是没错了,虽然你已经采纳了别人的回答,但我还是要把代码发出来供你学习,毕竟大家都在学习的路上嘛qwq