日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

掷骰子组合问题

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 掷骰子组合问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

擲N個骰子,最小值是Nx1,最大值是NxSides,組合數是Sides^N次方.

通過觀察下面簡單的2個骰子的情形,可以看出這是個典形的遞歸。

?

IndexDice1Dice2Sum
1112
2123
3134
4145
5156
6167
7213
8224
9235
10246
11257
12268
13314
14325
15336
16347
17358
18369
19415
20426
21437
22448
23459
244610

?具體代碼如下,可以分為從前往后處理,和分后往前處理兩種情況

'Public Parameter Public Out(), mOut, nOut '輸出數組 Public Nums%, Sides% '骰子數,點數 Public Org() '多維數組 Public arr '臨時變量Sub Roll_Dice_2() Dim i&, j& Nums = 5 '骰子數量 Sides = 7 '骰子點數 ReDim Org(1 To Nums) ReDim Out(1 To Sides ^ Nums, 1 To Nums) '輸出數組 ReDim arr(1 To Nums) '臨時數組 ReDim brr(1 To Sides) '序列數組 For j = 1 To Sidesbrr(j) = j '點數 Next j For i = 1 To NumsOrg(i) = brr '將一維數組并入,產生多維數組 Next i Dice_Combine_Recursion_Back 1, 1, Sides '從后往前循環 Dice_Combine_Recursion_Front Nums, 1, Sides '從前往后循環 Sheets("NxSides").Cells(2, 11).Resize(UBound(Out), UBound(Out, 2)) = Out End Sub'從后往前循環 'm表示骰子數 'k表示點數 Sub Dice_Combine_Recursion_Back(m, n, k) Dim i, j '變量 For i = n To k '循環點數arr(m) = Org(m)(i) '數據寫入If m < Nums ThenDice_Combine_Recursion_Back m + 1, n, kElseArr_In_Out arr '輸出結果End If Next i End Sub'從前往后循環 'm表示骰子數 'k表示點數 Sub Dice_Combine_Recursion_Front(m, n, k) Dim i, j '變量 For i = n To k '循環點數arr(m) = Org(m)(i) '數據寫入If m > 1 ThenDice_Combine_Recursion_Front m - 1, n, kElseArr_In_Out arr '輸出結果End If Next i End Sub'臨時數組寫入輸出數組 Sub Arr_In_Out(arr) nOut = nOut + 1 For mOut = 1 To UBound(arr)Out(nOut, mOut) = arr(mOut) Next End Sub

下圖是用遞歸計算的5個骰子,7個點面的分布情況。

具體文件可以從網盤下載

http://pan.baidu.com/s/1c10zH9u

?

轉載于:https://my.oschina.net/tedzheng/blog/1549404

總結

以上是生活随笔為你收集整理的掷骰子组合问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。