理想条件下计算愚公移山需要多久

理想条件下计算愚公移山需要多少时间。

太行山看成是一个底面是椭圆的椎体,长半轴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;
    }
}



计算结果:

7300201代	搬山人数:1			山的质量:8.670795614407829E1214600402代	搬山人数:3			山的质量:8.670795285907829E1221900603代	搬山人数:6			山的质量:8.670794628907829E1229200804代	搬山人数:12			山的质量:8.670793314907829E12365001005代	搬山人数:24			山的质量:8.670790686907829E12438001206代	搬山人数:48			山的质量:8.670785430907829E12511001407代	搬山人数:96			山的质量:8.670774918907829E12584001608代	搬山人数:192			山的质量:8.670753894907829E12657001809代	搬山人数:384			山的质量:8.670711846907829E127300020010代	搬山人数:768			山的质量:8.670627750907829E128030022011代	搬山人数:1536			山的质量:8.670459558907829E128760024012代	搬山人数:3072			山的质量:8.670123174907829E129490026013代	搬山人数:6144			山的质量:8.669450406907829E1210220028014代	搬山人数:12288			山的质量:8.668104870907829E1210950030015代	搬山人数:24576			山的质量:8.665413798907829E1211680032016代	搬山人数:49152			山的质量:8.660031654907829E1212410034017代	搬山人数:98304			山的质量:8.649267366907829E1213140036018代	搬山人数:196608			山的质量:8.627738790907829E1213870038019代	搬山人数:393216			山的质量:8.584681638907829E1214600040020代	搬山人数:786432			山的质量:8.498567334907829E1215330042021代	搬山人数:1572864			山的质量:8.326338726907829E1216060044022代	搬山人数:3145728			山的质量:7.981881510907829E1216790046023代	搬山人数:6291456			山的质量:7.292967078907829E1217520048024代	搬山人数:12582912			山的质量:5.915138214907829E1218250050025代	搬山人数:25165824			山的质量:3.159480486907829E1218668226代	搬山人数:50331648			山的质量:2.1762078678291016E918668326代	搬山人数:50331648			山的质量:1.4212331478291016E918668426代	搬山人数:50331648			山的质量:6.662584278291016E818668526代	搬山人数: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年,山几乎没有撼动, 到了后面子子孙孙越来越多,所有人都继承了愚公的意志,把挖山作为毕生的事业,终于把山挖没了。

附:愚公移山文言文
太行、王屋二山,方七百里,高万仞,本在冀州之南,河阳之北。

北山愚公者,年且九十,面山而居。惩山北之塞,出入之迂也,聚室而谋曰:“吾与汝毕力平险,指通豫南,达于汉阴,可乎?”杂然相许。其妻献疑曰:“以君之力,曾不能损魁父之丘,如太行、王屋何?且焉置土石?”杂曰:“投诸渤海之尾,隐土之北。”遂率子孙荷担者三夫,叩石垦壤,箕畚运于渤海之尾。邻人京城氏之孀妻有遗男,始龀,跳往助之。寒暑易节,始一反焉。

河曲智叟笑而止之曰:“甚矣,汝之不惠!以残年余力,曾不能毁山之一毛,其如土石何?”北山愚公长息曰:“汝心之固,固不可彻,曾不若孀妻弱子。虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙;子子孙孙无穷匮也,而山不加增,何苦而不平?”河曲智叟亡以应。

操蛇之神闻之,惧其不已也,告之于帝。帝感其诚,命夸娥氏二子负二山,一厝朔东,一厝雍南。自此,冀之南,汉之阴,无陇断焉。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值