思路:利用动态规划,把所有子问题写出来,然后逐个求解。首先从最简单的情况开始:1个骰子的情况,2个骰子的情况,3个骰子的情况,…以此类推。如果用手算的话,前三种情况足够让你发现其中的规律。
#include <iostream>
using namespace std;
int main()
{
#define MAX_SUM 10000
#define MAX_N 10
int n = 3;
int m[MAX_N][MAX_SUM] = {0};
for (int i = 1; i <= 6; i++) {
m[1][i] = 1;
}
for (int i = 2; i <= n; i++) {
for (int j = i, h=i-1; j <= 6*i - 6 + 1; j++, h++) {
for (int k = 0; k < 6; k++) {
m[i][j+k] += m[i-1][h];
}
}
}
// 输出二维数组m
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= 6 * n; j++) {
cout << m[i][j] << " " ;
}
cout << endl;
}
cout << endl;
// 输出答案
cout << n << "个骰子时,各种sum出现的次数:" << endl;
for (int i = n; i <= n * 6; i++) {
cout << "SUM=" << i << ", " << "出现次数:" << m[n][i] << endl;
}
return 0;
}
参考:https://www.cnblogs.com/wangkundentisy/p/9378886.html