台灣最大程式設計社群網站
線上人數
797
 
會員總數:243167
討論主題:187984
歡迎您免費加入會員
討論區列表 >> C/C++ >> 不同骰子數量比大小之機率計算
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
不同骰子數量比大小之機率計算
價值 : 30 QP  點閱數:135 回應數:6

樓主

劉羿呈
門外漢
0 1
10 3
發送站內信

捐贈 VP 給 cyatmirror
想要計算不同骰子數量時比大小的機率:
將(骰子數量*6)/2當作中間值,
若骰子骰出的數字和小於等於中間值則計為"小",
若骰子骰出的數字和大於中間值則計為"大"
EX:1個骰子時,P(小)=1/2;2個骰子時,P(小)=5/12;3個骰子時,P(小)=3/8 .....<註:P為機率>

我的想法是:
設一個陣列A[total]去儲存每一個組合,
依照幾個骰子就去跑幾次迴圈(只是我不知道怎麼依照輸入值去增加迴圈數)
大概的意思就是
(1,1,1)=3 (1,1,2)=4 (1,1,3)=5....
(1,2,1)=4 (1,2,2)=5 (1,2,3)=6....
.
.
.

計算完每個數字後,
設一個int small去儲存"小"的數量,
再用if迴圈檢查是否大於中間值,
若小於等於中間值則使small+1

最後輸出答案為 small/total

但是我在迴圈的設置上完全摸不著頭緒(初學c++,對於複雜的迴圈有點卡卡的)
也試不出如何依照輸入骰子數做出符合的迴圈。

希望版上高手們可以給小弟些指導~感激不盡




搜尋相關Tags的文章: [ 骰子 ] , [ C++ ] , [ 機率 ] ,
本篇文章發表於2018-09-09 01:04
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

cyatmirror
捐贈 VP 給 cyatmirror 檢舉此回應
這是我在骰子數為三時做的,希望有高手指點如何推及任意個骰子數~

本篇文章回覆於2018-09-09 01:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

小魚
檢舉此回應
可以透過 全域變數 跟 遞迴 去完成


本篇文章回覆於2018-09-09 10:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

cyatmirror
捐贈 VP 給 cyatmirror 檢舉此回應
非常感謝你的幫忙,
不過我有些地方有點疑惑,
不知道可不可以簡單說明一下:
int&的用法,
以及return回傳值不同的意義

還請大大稍微解釋一下 謝謝~
本篇文章回覆於2018-09-09 11:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

小魚
檢舉此回應
int& 請搜尋 傳值與傳址,這是C語言中很基本的觀念

> return回傳值不同的意義
這我不知道你的問題是什麼...
這是邏輯的問題而已...
你的問題可能是輾轉相除法吧,
那你應該要去查輾轉相除法的定義,
再來看懂我的程式碼...

程式碼已經寫給你了,
剩下的東西你要自己做功課了,
再問下去我就要收學費了...
本篇文章回覆於2018-09-09 12:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

cyatmirror
捐贈 VP 給 cyatmirror 檢舉此回應
好的謝謝你的幫忙
感激不盡~
本篇文章回覆於2018-09-09 12:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

淺水員
檢舉此回應
有些問題可以透過數學來解
可以提升程式的效率
以這題來說有這樣的公式


直接用上面的公式寫效率會滿好的
不過要很小心溢位的問題

以時間複雜度來說
2F的 getSmall 函式大約為 6 的 n 次方(n為骰子數)
大概跑到 n=11 以上就感覺得到變慢了

另一個計算方式可以參考
https://www.ptt.cc/bbs/C_and_CPP/M.1421818786.A.621.html
這寫法很簡單
時間複雜度差不多是 n 平方
在溢位發生前不大需要擔心效率問題
此外,溢位問題也比公式解好處理
本篇文章回覆於2018-09-11 23:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.