Python中如何解决人口增长问题的代码实现?
题目背景
某市人口 p0,每年自身人口增长 percent % 。每年固定的,外来移民人数有 aug 人,
问哪一年人数可以大于等于 p
看到一个哥们的实现如下
from math import ceil, log
def nb_year(p0, percent, aug, p):
percent = 1 + percent / 100.
r = aug / (1 - percent)
return ceil(log((p - r) / (p0 - r), percent))
有人看出来是,这是什么原理吗
Python中如何解决人口增长问题的代码实现?
测试 print(nb_year(1500000, 2.5, 10000, 2000000)) 答案 10,算法没问题,我没看懂
我无法理解你的问题。
看来得泛泛高数书了,数列问题
假设每年人口增长率为 r
1 年后, 总人口 = p0(1+r) + aug
2 年后, 总人口 = p0(1+r) + aug + aug = p0(1+r)^2 + aug(1+r) + aug
…
n 后年, 总人口 = p0(1+r)^n + aug(1+r)^(n-1) + … + aug(1+r) + aug
根据题设, 模型是这样的么?

你这个不是可以数学方法求解的吗… 设第 n 年人口数为 pop(n),则{pop(n)+aug/percent}为以 1+percent 为公比的等比数列
给个直观解释:想象外来移民全来自于另一个城市 B,B 人口增长率和题目里的城市 A 一致,并且每年增长的人数全移民到 A。所以 B 的人口是 aug/percent
于是原来问题等价于总人口为 p0+aug/percent 的两个城市 AB,多久能增长到 p+aug/percent
不能这么算吧,A 城市算是利滚利,aug 是定值。
恕我直言,这是中学数学……
四楼的模型是正确的,p0(1+r)^n + aug(1+r)^(n-1) + … + aug(1+r) + aug=p0(1+r)^n+aug((1+r)^n - 1)/r > p
(1+r)^n>(p+aug/r)/(p0+aug/r)
当然这个代码也有点脱裤子放屁
复利计算
确实是
#12 B 每年新增的都变成 aug 到 A 里了,所以 B 人口是不变的,每年的 aug 也不变



