甲有4個骰子,乙有3個骰子,乙搖出的骰子點(diǎn)數(shù)之和大于甲搖出的點(diǎn)數(shù)之和的概率是多少

題目:甲有4個骰子,乙有3個骰子,乙搖出的骰子點(diǎn)數(shù)之和大于甲搖出的點(diǎn)數(shù)之和的概率是多少

分析

這是一道數(shù)學(xué)上的排列問題,計算機(jī)可以把所有情況都枚舉出來,格式[A,A,A,A,B,B,B],一共6^7種可能,看其中哪些滿足條件。

每個骰子點(diǎn)數(shù)是1-6,甲的擲出的點(diǎn)數(shù)和范圍是4-24,乙擲出的點(diǎn)數(shù)和范圍是3-18,例如甲擲出的4的時候,乙必須比甲大,所以乙的范圍是5-18,以此類推

alt 甲乙之間的關(guān)系

先給大家展示個有問題的方法,看大家有沒看出什么問題,也是我找了一個晚上才找出問題所在


js

const util={};
//加下來用jia來表示甲的和點(diǎn)數(shù),yi來表示乙的和點(diǎn)數(shù)
//滿足條件的可能性方法
util.getAllPro=(jia)=>{
    //一個哨兵變量用來保存當(dāng)甲總和數(shù)為jia的時候總的可能性數(shù)量
    let total=0;
    //甲的總和確定了,乙的總和必須比jia大,所以乙的總和在大于等于jia+1到小于等于18之間
    for(let i=jia+1;i<=18;i++){
        total+=util.getYiPro(i);
    }
    //當(dāng)甲的總和數(shù)為jia的時候的可能情況總和
    return util.getjiaPro(jia)*total;
}

//乙的總和數(shù)為yi的時候的可能性數(shù)量
util.getYiPro=(yi)=>{
    //原理見圖2
    return util.addNum(yi-2);
}

alt 乙總數(shù)的得到原理
util.getjiaPro=(jia)=>{
    //原理見圖3
    return util.addaddNum(jia-3);
}
alt 甲總數(shù)的得到原理
//求1+2+3+...+n
//尾遞歸
util.addNum=(n,total=0)=>{
    if(n===0){
        return total;
    }
    total+=n;
    return util.addNum(n-1,total)
}
//3維的時候
util.addaddNum=(n,total=0)=>{
    for(var i=0;i<n+1;i++){
        total+=util.addNum(i);
    }
    return total;
}

let allprotime=0;
//甲的范圍從4-17
for(let jiaNum=4;jiaNum<18;jiaNum++){
    allprotime+=util.getAllPro(jiaNum);
}
console.log('滿足條件的可能性',allprotime);  //滿足條件的可能性 900048
console.log('所有的可能性',Math.pow(6,7));  //所有的可能性 279936

等到的結(jié)果中

滿足條件的可能性>所有的可能性

所以計算方式有問題

乙為18的時候這個的組合只有一種情況,而util.addNum(18)就不是了,是因為,乙的每個骰子的數(shù)字不會大于6,這就導(dǎo)致了util.addNum計算不正確

我想到正確的解法

但是增加了空間復(fù)雜度,也增加了時間復(fù)雜度

//乙的總和數(shù)為yi的時候的可能性數(shù)量
util.getYiPro = (yi, total = 0) => {
    for (let i = 1; i <= 6; i++) {
        for (let j = 1; j <= 6; j++) {
            for (let k = 1; k <= 6; k++) {
                if (i + j + k === yi) {
                    total += 1;
                }
            }
        }
    }
    return total;
}
util.getjiaPro = (jia, total = 0) => {
    for (let i = 1; i <= 6; i++) {
        for (let j = 1; j <= 6; j++) {
            for (let k = 1; k <= 6; k++) {
                for (let d = 1; d <= 6; d++) {
                    if (i + j + k + d === jia) {
                        total += 1;
                    }
                }
            }
        }
    }
    return total;
}

代碼 github地址

因為甲的4個骰子和乙的3個骰子其實可以動態(tài)變化的,這里暫時不繼續(xù)了

如果有什么好的,方法,來解決這個問題,歡迎來告知

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 你的數(shù)學(xué)直覺怎么樣?你能憑借直覺,迅速地判斷出誰的概率大,誰的概率小嗎?下面就是 26 個這樣的問題。如果你感興趣...
    cnnjzc閱讀 7,460評論 0 12
  • 這章視覺筆記我加入了故事力的表現(xiàn),用兩只兔子曾現(xiàn)故事力。為什么要用兔子作為主角呢?大家都知道小兔子有兩個大耳朵非常...
    重拾圖趣閱讀 576評論 1 3
  • 我與父親的戰(zhàn)爭已經(jīng)延續(xù)了好多年,從我哇哇墜地時候開始吹響的集結(jié)號角,到我青春期時帶著嘴角不屑的大反攻,到離家時恍...
    孤lc閱讀 505評論 0 1

友情鏈接更多精彩內(nèi)容