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

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

太行山看成是一个底面是椭圆的椎体,长半轴a=400,000米,短半轴b=3000米,海拔3000米。

太行山距离渤海200,000米,每个人每天移动15kg(一个星期两个人用辆车移动210kg,去4天,回来3天)。

假设愚公有3个儿子,每个儿子都娶媳妇了,三十年算一代,每一代都生2个儿子。每一代活80岁,60岁退休。

每一代当中,一半的人负责从事生产活动,一半的人负责搬山。

package test.algorithmQuestion;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @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,3));
        int days =0;
        int gen = 1;
        while(m>0){
     
            days++;
            int sum = genInfoList.stream()
                    .mapToInt(GenInfo::getNum).sum(); //搬山人数
            m -= sum*WOOK;
            if(days%(365*30)==0){
     
                System.out.println("第"+days+"天\t"
                        +gen+"代\t搬山人数:"+sum+"\t\t\t山的质量:"+m);
                gen++;
                for (int i = 0; i < genInfoList.size(); i++) {
     
                    if(genInfoList.get(i).getGen()==3){
     
                        //第三代退休
                        genInfoList.remove(i);
                    }
                }
                genInfoList.stream().map(GenInfo::addGen)
                        .collect(Collectors.toList());
                genInfoList.add(new GenInfo(1,genInfoList
                        .get(genInfoList.size()-1).getNum()*GEN_NUM));
            }
              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;
    }
}

计算结果:

109501代	搬山人数:3			山的质量:8.670795231157829E12219002代	搬山人数:9			山的质量:8.670793752907829E12328503代	搬山人数:21			山的质量:8.670790303657829E12438004代	搬山人数:42			山的质量:8.670783405157829E12547505代	搬山人数:84			山的质量:8.670769608157829E12657006代	搬山人数:168			山的质量:8.670742014157829E12766507代	搬山人数:336			山的质量:8.670686826157829E12876008代	搬山人数:672			山的质量:8.670576450157829E12985509代	搬山人数:1344			山的质量:8.670355698157829E1210950010代	搬山人数:2688			山的质量:8.669914194157829E1212045011代	搬山人数:5376			山的质量:8.669031186157829E1213140012代	搬山人数:10752			山的质量:8.667265170157829E1214235013代	搬山人数:21504			山的质量:8.663733138157829E1215330014代	搬山人数:43008			山的质量:8.656669074157829E1216425015代	搬山人数:86016			山的质量:8.642540946157829E1217520016代	搬山人数:172032			山的质量:8.614284690157829E1218615017代	搬山人数:344064			山的质量:8.557772178157829E1219710018代	搬山人数:688128			山的质量:8.444747154157829E1220805019代	搬山人数:1376256			山的质量:8.218697106157829E1221900020代	搬山人数:2752512			山的质量:7.766597010157829E1222995021代	搬山人数:5505024			山的质量:6.862396818157829E1224090022代	搬山人数:11010048			山的质量:5.053996434157829E1225185023代	搬山人数:22020096			山的质量:1.437195666157829E12
............25402324代	搬山人数:44040192			山的质量:1.7056079178291016E925402424代	搬山人数:44040192			山的质量:1.0450050378291016E925402524代	搬山人数:44040192			山的质量:3.8440215782910156E825402624代	搬山人数:44040192			山的质量:-2.7620072217089844E8

可以看出,第二十三代人以后才开始太行山才开始出现动摇,四千多万子孙奋战了2000多天,七年的时间才把山移完。

你可能感兴趣的:(python数据人工智能)