java蚂蚁爬杆

来源:互联网 发布:知乎为什么这么火 编辑:程序博客网 时间:2024/04/27 16:07

import java.util.List;
import java.util.ArrayList;
import java.math.BigDecimal;
/*-作者:volcano_hosan
*-----------蚂蚁爬杆
*有一根300厘米的细木杆,在第30厘米、80厘米、110厘米、160厘米、250厘米这五个位置上各有一只蚂蚁。
*木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
*当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝相反方向走。假设蚂蚁们每秒钟可以走5厘米的距离。
*请编写一个程序,计算各种可能情形下所有蚂蚁都离开木杆的最小时间和最大时间
*-------分析:两只蚂蚁碰头之后,因为是相同的个体,速度一样,只是不作停留掉头回走,可以认为两只蚂蚁的行进方向没有改变一直朝一个方向前进
*/
public class Ant{
    private BigDecimal totalLength;
    private BigDecimal speed;
    private List<BigDecimal> positions;
    private BigDecimal maxTime;
    private BigDecimal minTime;


    Ant(){
        totalLength = new BigDecimal("300");
        speed = new BigDecimal("5");
        positions = new ArrayList<BigDecimal>();
        positions.add(new BigDecimal("30"));
        positions.add(new BigDecimal("80"));
        positions.add(new BigDecimal("110"));
        positions.add(new BigDecimal("160"));
        positions.add(new BigDecimal("250"));
        setMinTime();
        setMaxTime();
    }


    private void setMaxTime(){
        BigDecimal maxNearSidePosition = new BigDecimal("0");


        for(BigDecimal position:positions){
            maxNearSidePosition = maxNearSidePosition.intValue() > position.intValue() ? maxNearSidePosition : position;
        }


        maxTime = maxNearSidePosition.divide(speed);
    }


    public BigDecimal getMaxTime(){
        return maxTime;
    }


    private void setMinTime(){
        BigDecimal halfLength = totalLength.divide(new BigDecimal("2"));
        BigDecimal minNearHalfPositionLength = halfLength;


        for(BigDecimal position:positions){
            BigDecimal nearHalfPositionLength = position.subtract(halfLength).abs();
            minNearHalfPositionLength = minNearHalfPositionLength.intValue() < nearHalfPositionLength.intValue() ? minNearHalfPositionLength : nearHalfPositionLength;
        }


        BigDecimal anotherHalfLength = halfLength.subtract(minNearHalfPositionLength);
        minTime = anotherHalfLength.divide(speed);
    }


    public BigDecimal getMinTime(){
        return minTime;
    }


    public static void main(String []args){
        Ant ant = new Ant();
        System.out.println("最大时间:" + ant.getMaxTime());
        System.out.println("最大时间:" + ant.getMinTime());
    }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 天猫精灵生活灯老是离线怎么办 电信合约没到期不想用了怎么办 电信合约卡到期不想用了怎么办 欧普照明平板灯坏了怎么办 交通违章处理了但系统没更新怎么办 车里的空调一直吹的是热气怎么办 丰田雷凌保养手册丢了怎么办 海尔电视两年主板坏了怎么办 海信电视保修期内主板坏了怎么办 乐视电视的主板坏了怎么办 车电瓶没电了打不着火怎么办 面包车没电了打不着火怎么办 汽车电瓶没电了打不着火怎么办 自动挡的车没有电打不起来火怎么办 自动挡汽车没电了打不着火怎么办 自动挡小车没电了打不着火怎么办 被4s店销售骗了怎么办 宇通客车尿素泵不工作怎么办 汽车打蜡不小心打在车帮怎么办 海信电视怎么安装第三方软件怎么办 网上买票的时候不想用学生票怎么办 南方公园完整破碎讲话嘴不动怎么办 同一个安全员被锁在两个项目怎么办 家长拖欠家教老师的课时费怎么办 合同没到期房东不退押金怎么办 租房合同没到期房东要违约怎么办 档案存放费交了一年的延期怎么办 天津房子卖了户口没地方迁怎么办 中国到美国读计算机硕士签证怎么办 在江苏大学去德国读研怎么办? 宿舍上下铺的床一动就响怎么办 自助取款机存款忘打印了凭条怎么办 高一新生跨省转学籍怎么办 网上买票不小心买成了学生票怎么办 做横幅标语字打出来老是歪的怎么办 创业板股票暂停上市后钱怎么办 新股东入股公司之前的亏损怎么办 目前公司账面亏损有人要入股怎么办 土地确权后没有土地的人怎么办 老板不发工资跑路了怎么办 别人登录了我的美团账号怎么办