账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    茶后一道算术题
    26
    0

    本人最近经常脑抽,容易产生幻想! 求治疗!

    这道题并非来自于 产品需求, 而是在sf看帖子的时候意淫的时候产生的!

    需求:

    写一算法 ,满足以下三个条件即可!
    条件一:5个数 和值为100;
    条件二:5个数 的每个数值 波动范围 为 16 - 24;
    条件三:每种组合出现的概率必须为 1/3951 ,也就是 万分之3.5 ( 下面做说明 );
    

    条件三说明 : 穷举出 所有 组合

    var sum = 0 , q ,w ,r ,t,y ;
    for (q = 16; q < 25 ; q ++ ) {
        for (w = 16; w < 25 ; w ++ ) {
            for (r = 16; r < 25 ; r ++ ) {
                for (t = 16; t < 25 ; t ++ ) {
                    for (y = 16; y < 25 ; y ++ ) {
                        if((q + w + r + t + y) == 100){
                            sum ++;
                        }
                    }
                }
            }
        }
    }
    console.log(sum);  // 总共有 3951 组合情况, 那么每一种出现的概率应该是 1/3951;
    

    我自己写了个 函数,下面直接贴代码:(代码很原始,请轻喷!)

    function ran() {
        var a, b, c, d, e, average, sum = 0, str2 = "", arr = [];
        a = parseInt(Math.random() * 9) + 16;
        b = parseInt(Math.random() * 9) + 16;
    
        average = (100 - (a + b ))/ 3;
        if ((average - 16) > (24 - average )) {
            c = parseInt(Math.random() * parseInt(24 - average) *2 ) + parseInt(average - parseInt(24 - average));
        }else {
            c = parseInt(Math.random() * parseInt(average - 16) *2 ) + parseInt(average - parseInt(average - 16));
        }
    
        average = (100 - (a + b + c))/ 2;
        if ((average - 16) > (24 - average )) {
            d = parseInt(Math.random() * parseInt(24 - average) *2 ) + parseInt(average - parseInt(24 - average));
        }else {
            d = parseInt(Math.random() * parseInt(average - 16) *2 ) + parseInt(average - parseInt(average - 16));
        }
        e = 100 - a - b - c - d;
    }

    基本思路: 先随机两个,然后再根据前面生成的两个数,改变后面的数的 波动区间。
    然而检查中发现:问题那么多!!!

    1、用5000000次循环检查 所以可能出现的 组合数 为2248, 也就是说少了接近2000中可能;
    2、循环1000000次,检查其中 两三种 出现的概率 
        (20 ,20 ,20,20 ,20)出现的概率波动比较大在170-210之间,
        (20 ,19 ,21,20 ,20)出现的概率 在230-270之间 ,这个还概率还是比较合理,
        (24 ,19 ,21,20 ,16)出现的概率 为 0,这个.....
        

    各位路过的大神,就当 茶后 笑谈,给鄙人点亮 知识之光,赐予我 高明的 思路吧,阿门!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部