原文:
给定一个整数 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)
麻将胡了pg电子网站的版权属于:月萌api www.moonapi.com,转载请注明出处