面试题60:n个骰子的点数

思路:利用动态规划,把所有子问题写出来,然后逐个求解。首先从最简单的情况开始: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

发布了92 篇原创文章 · 获赞 2 · 访问量 3418

猜你喜欢

转载自blog.csdn.net/zxc120389574/article/details/105050305
今日推荐