蜡烛燃烧(阿里3.15笔试)

现在有一根蜡烛长n厘米,从一端点火,然后对n-1个位置进行随机切割,将蜡烛分为两段,x和n-x,等较短的一端燃尽后(这里假设x段比较短,较短的一段燃尽后,两段蜡烛长度就变成了0和n-x-x了,注意这里两段蜡烛是同时在燃烧!!),再对剩余的蜡烛(即n-x-x段)进行下一段切割
注意:最多只能切割两次
一种切割方案会产生一个蜡烛燃烧的时间t
求所有切割方案下蜡烛燃烧时间的期望值

注意:有可能切割方案的概率不同(陷阱)

下面献上我的代码和思路,欢迎一起探讨

public class Main {
   
    /*
    现在有一根蜡烛长n厘米,从一端点火,然后对n-1个位置进行随机切割,
    将蜡烛分为两段,x和n-x,等较短的一端燃尽后
    (这里假设x段比较短,较短的一段燃尽后,两段蜡烛长度就变成了0和n-x-x了,注意这里两段蜡烛是同时在燃烧!!),
    再对剩余的蜡烛(即n-x-x段)进行下一段切割
    注意:最多只能切割两次
    一种切割方案会产生一个蜡烛燃烧的时间t
    求所有切割方案下蜡烛燃烧时间的期望值
     */
    /*
    分析:
    一个长 n cm的蜡烛,每个位置的切割概率都相同,都为1/(n-1)
    切割后,两种情况:
    1:两根一样长:时间就是:长度
    2:一根长m1,一根短m2。
       燃烧m2分钟,短的燃烧燃尽

    蜡烛还剩下:m2-m1长度。第一次每个位置点的切割概率都相同

    注意::::但是第二次切割的时候,概率不同!!!!!!!!!!!!!
    例如:7cm的蜡烛
    第一次切一个5cm,一个2cm,有6中切法
    第二次切一个5cm的,有4中切法,概率都是不同的

    一个时间t的概率:
    如果只能切割一次:
    第一次切割点的概率*第一次燃烧的时间

    如果可以切割两次:
    第一次切割点的概率*第二次切割点的概率*(第一次燃烧的时间+第二次燃烧的时间)
	
	第一次切割点的概率:1/第一次可以切割的次数
	第二次切割点的概率:1/第二次可以切割的次数

	每次可以切割的次数=当前蜡烛长度-1
     */
    static int[] two;  //two[0]=第一次切割前长度-1=第一次有多少种切法,two[1]=第二次切割前长度-1=第二次有多少种切法
    static double n;    //记录最终的平均燃烧蜡烛时间的期望值
    //len代表长度,cur代表当前所用的时间,count代表第几次切割
    public static void dfs(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值