n个骰子的点数

xiaoxiao2021-02-28  87

问题:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能的值出现的概率 思路:二维数组pos,pos[1]记录第一个骰子出现1-6的次数,pos[2]记录两个骰子和为2*1~6*2 每次出现的次数就是f(k-1),f(k-2),f(k-3),f(k-4),f(k-5),f(k-6) 初始化第一组的每个可能的值为1次;然后pos[1],pos[0],pos[1],pos[0]。。。。每次都要清空已经用过的数组,等待下一次使用。

#include<iostream> #include<vector> using namespace std; int main() { int n = 6; vector<int> temp(40); vector<vector<int> > pos(2, temp); for (int i = 0; i < 40; i++) { pos[0][i] = 0; pos[1][i] = 0; } int num = 0; for (int i = 1; i <= 6; i++) pos[num][i] = 1; int nTime = 2; while (nTime <= n) { for (int i = nTime; i <= nTime * 6; i++) { num = 1 - num; for (int j = 1; j <= 6 && j <= i; j++) { pos[num][i] += pos[1 - num][i - j]; } } for (int i = 0; i < 40; i++) pos[1 - num][i] = 0; nTime++; } double sum = pow(6, n); for (int i = n; i <= n * 6; i++) cout << double(pos[num][i]) / sum; }
转载请注明原文地址: https://www.6miu.com/read-97324.html

最新回复(0)