理想条件下计算愚公移山需要多少时间。
太行山看成是一个底面是椭圆的椎体,长半轴a=400,000米,短半轴b=3000米,海拔h=3000米。太行山可以看作一个圆锥体,体积计算公式为1/3×(π×a×b)×h,山的密度ρ=2.3g/cm^3
太行山距离渤海200,000米,每个人每天移动15kg(一个星期两个人用辆车移动210kg,去4天,回来3天)。
假设愚公有2个儿子,每个儿子都娶媳妇了,二十年算一代,每一代都生2个儿子。每一代活80岁,60岁退休。
每一代当中,一半的人负责从事生产活动,一半的人负责搬山。
package test.arithmetic;
import java.util.ArrayList;
import java.util.List;
/**
* 理想条件下计算愚公移山需要多少时间。
*
* 太行山看成是一个底面是椭圆的椎体,长半轴a=400,000米,短半轴b=3000米,海拔h=3000米。太行山可以看作一个圆锥体,体积计算公式为1/3×(π×a×b)×h,山的密度ρ=2.3g/cm^3
*
* 太行山距离渤海200,000米,每个人每天移动15kg(一个星期两个人用辆车移动210kg,去4天,回来3天)。
*
* 假设愚公有2个儿子,每个儿子都娶媳妇了,二十年算一代,每一代都生2个儿子。每一代活80岁,60岁退休。
*
* 每一代当中,一半的人负责从事生产活动,一半的人负责搬山。
* @author *cruder
* @version 1.0
* @since 2021/1/30 17:07
*/
public class Algorithm01 {
private static final int A = 400_000;
private static final int B = 3000;
private static final int H = 3000;
private static final double RHO = 2.30;
private static final int GEN_NUM = 2;
private static final int WOOK = 15;
public static void main(String[] args) {
double s = Math.PI*A*B;
double v = s*H/3;
double m = RHO*v;
List<GenInfo> genInfoList = new ArrayList<>();
genInfoList.add(new GenInfo(1,1));
int days =0;
int gen = 1;
while(m>0){
days++;
int sum = genInfoList.stream()
.mapToInt(GenInfo::getNum).sum(); //搬山人数
m -= sum*WOOK;
if(days%(365*20)==0){
System.out.println("第"+days+"天\t"+(days/365)+"年\t"
+gen+"代\t搬山人数:"+sum+"\t\t\t山的质量:"+m);
gen++;
genInfoList.forEach(GenInfo::addGen);
for (int i = 0; i < genInfoList.size(); i++) {
if(genInfoList.get(i).getGen()==3){
//第三代退休
genInfoList.remove(i);
}
}
genInfoList.add(new GenInfo(1,genInfoList
.get(genInfoList.size()-1).getNum()*GEN_NUM));
}
if(days>274280){
System.out.println("第"+days+"天\t"
+gen+"代\t搬山人数:"+sum+"\t\t\t山的质量:"+m);
}
}
}
}
class GenInfo{
private int gen;
private int num;
public GenInfo(int gen, int num) {
this.gen = gen;
this.num = num;
}
public int addGen(){
return this.gen++;
}
public int getGen() {
return gen;
}
public void setGen(int gen) {
this.gen = gen;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
计算结果:
第7300天 20年 1代 搬山人数:1 山的质量:8.670795614407829E12
第14600天 40年 2代 搬山人数:3 山的质量:8.670795285907829E12
第21900天 60年 3代 搬山人数:6 山的质量:8.670794628907829E12
第29200天 80年 4代 搬山人数:12 山的质量:8.670793314907829E12
第36500天 100年 5代 搬山人数:24 山的质量:8.670790686907829E12
第43800天 120年 6代 搬山人数:48 山的质量:8.670785430907829E12
第51100天 140年 7代 搬山人数:96 山的质量:8.670774918907829E12
第58400天 160年 8代 搬山人数:192 山的质量:8.670753894907829E12
第65700天 180年 9代 搬山人数:384 山的质量:8.670711846907829E12
第73000天 200年 10代 搬山人数:768 山的质量:8.670627750907829E12
第80300天 220年 11代 搬山人数:1536 山的质量:8.670459558907829E12
第87600天 240年 12代 搬山人数:3072 山的质量:8.670123174907829E12
第94900天 260年 13代 搬山人数:6144 山的质量:8.669450406907829E12
第102200天 280年 14代 搬山人数:12288 山的质量:8.668104870907829E12
第109500天 300年 15代 搬山人数:24576 山的质量:8.665413798907829E12
第116800天 320年 16代 搬山人数:49152 山的质量:8.660031654907829E12
第124100天 340年 17代 搬山人数:98304 山的质量:8.649267366907829E12
第131400天 360年 18代 搬山人数:196608 山的质量:8.627738790907829E12
第138700天 380年 19代 搬山人数:393216 山的质量:8.584681638907829E12
第146000天 400年 20代 搬山人数:786432 山的质量:8.498567334907829E12
第153300天 420年 21代 搬山人数:1572864 山的质量:8.326338726907829E12
第160600天 440年 22代 搬山人数:3145728 山的质量:7.981881510907829E12
第167900天 460年 23代 搬山人数:6291456 山的质量:7.292967078907829E12
第175200天 480年 24代 搬山人数:12582912 山的质量:5.915138214907829E12
第182500天 500年 25代 搬山人数:25165824 山的质量:3.159480486907829E12
第186682天 26代 搬山人数:50331648 山的质量:2.1762078678291016E9
第186683天 26代 搬山人数:50331648 山的质量:1.4212331478291016E9
第186684天 26代 搬山人数:50331648 山的质量:6.662584278291016E8
第186685天 26代 搬山人数:50331648 山的质量:-8.871629217089844E7
计算结果说明:
愚公20岁的时候产生了搬山的想法,这是第1代,取了一个媳妇,生了2个儿子,媳妇负责赚钱养家糊口,自己扛起锄头铁锤去挖山,每天挖15kg,主要是用车子把山拉取渤海太费时间了。
第2代,愚公40岁,2个儿子20岁,4个孙子0岁,挖山人数变成3人。
第3代,愚公60岁,退休,2个儿子40岁,4个孙子20岁,8个曾孙0岁,挖山人数6人
第四代,愚公80岁,2个儿子60岁,总的挖山人数12人
…
挖了500年,山才挖掉5/8,挖山效率指数级增长,到了第26代,186685天,挖山人数变成了5000多万人,才把山完全挖完。前面400年,山几乎没有撼动, 到了后面子子孙孙越来越多,所有人都继承了愚公的意志,把挖山作为毕生的事业,终于把山挖没了。
附:愚公移山文言文
太行、王屋二山,方七百里,高万仞,本在冀州之南,河阳之北。
北山愚公者,年且九十,面山而居。惩山北之塞,出入之迂也,聚室而谋曰:“吾与汝毕力平险,指通豫南,达于汉阴,可乎?”杂然相许。其妻献疑曰:“以君之力,曾不能损魁父之丘,如太行、王屋何?且焉置土石?”杂曰:“投诸渤海之尾,隐土之北。”遂率子孙荷担者三夫,叩石垦壤,箕畚运于渤海之尾。邻人京城氏之孀妻有遗男,始龀,跳往助之。寒暑易节,始一反焉。
河曲智叟笑而止之曰:“甚矣,汝之不惠!以残年余力,曾不能毁山之一毛,其如土石何?”北山愚公长息曰:“汝心之固,固不可彻,曾不若孀妻弱子。虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙;子子孙孙无穷匮也,而山不加增,何苦而不平?”河曲智叟亡以应。
操蛇之神闻之,惧其不已也,告之于帝。帝感其诚,命夸娥氏二子负二山,一厝朔东,一厝雍南。自此,冀之南,汉之阴,无陇断焉。