原文:

给定一个整数 n ,任务是打印通过反复掷骰子得到总和 n 的方法。

输入: n = 3 输出: 1 1 1 2 2 1 3 说明:标准骰子有 6 个面,即{1,2,3,4,5,6}。因此反复掷骰子后得到和 3 的方式如下: 1 1 1 = 3 1 2 = 3 2 1 = 3 3 = 3

输入: n = 2 输出: 1 1 2

方法:这个问题可以用和来解决。其思想是迭代范围【1,6】和求剩余的和,即(n–i),并在类似的数据结构中不断追加当前骰子值的值。如果所需的总和为零,则打印存储字符串中的元素。

下面是上述方法的实现

c

// c   program of the above appraoch
#include 
using namespace std;
// recursive function to print the
// number of ways to get the sum
// n with repeated throw of a dice
void printways(int n, string ans)
{
    // base case
    if (n == 0) {
        // print characters in
        // the string
        for (auto x : ans) {
            cout << x << " ";
        }
        cout << endl;
        return;
    }
    // if n is less than zero,
    // no sum is possible
    else if (n < 0) {
        return;
    }
    // loop to iterate over all
    // the possible current moves
    for (int i = 1; i <= 6; i  ) {
        // recursive call for the
        // remaining sum considering
        // i as the current integer
        printways(n - i, ans   to_string(i));
    }
}
// driver code
int main()
{
    int n = 3;
    printways(n, "");
    return 0;
}

output

1 1 1 
1 2 
2 1 
3 

时间复杂度:o(6n) 辅助空间: o(1)