C++ 所有可能的组合来分割一包糖果
我有问题要解决,我被卡住了,我不知道如何开始 假设我有R个孩子和S糖果。我想把糖果分给孩子们。每个孩子可以得到0、1、2、3或4个糖果。如何找到这种划分的所有可能性C++ 所有可能的组合来分割一包糖果,c++,algorithm,combinations,C++,Algorithm,Combinations,我有问题要解决,我被卡住了,我不知道如何开始 假设我有R个孩子和S糖果。我想把糖果分给孩子们。每个孩子可以得到0、1、2、3或4个糖果。如何找到这种划分的所有可能性 #include <iostream> using namespace std; void solve(int r, int s) { if (s == 0) { cout << "no more candies" << endl;
#include <iostream>
using namespace std;
void solve(int r, int s) {
if (s == 0)
{
cout << "no more candies" << endl;
return;
}
if (r == 0)
{
cout << "last child" << endl;
return;
}
for (int j = 0; j < 4 && j <= s; ++j)
{
cout << "r: " << r << " j: " << j << endl;
solve(r-1, s - j);
}
}
int main () {
int r, s;
cin >> r >> s;
solve(r, s);
return 0;
}
现在我有了这样的东西,我在输出中看到我在这里有解决方案,但我不知道如何获取所有可能性并将其存储到例如vector中。只需在最后一个递归级别存储计数和保存变量
vector<int> counts;
vector<vector<int>> sol;
void solve(int r, int s) {
if (s == 0)
{
sol.push_back(counts);
return;
}
if (r == 0)
{
return;
}
for (int j = 0; j <= 4 && j <= s; ++j)
{
counts[r - 1] += j;
solve(r - 1, s - j);
counts[r - 1] -= j;
}
}
int main() {
int r, s;
r = 3;
s = 5;
for (int j = 0; j < r; ++j)
counts.push_back(0);
solve(r, s);
for (int i = 0; i < sol.size(); i++) {
for (int j = 0; j < sol[i].size(); j++) {
cout << sol[i][j] << ' ';
}
cout << endl;
}
return 0;
}
您应该从编写程序来读取输入开始。