インタビューの質問60:n個のサイコロ

アイデア:すべてのサブ問題を書き出すための動的プログラミングを使用し、解決するために一つずつ。、サイコロの3、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