Closed. This question needs to be more focused 。它目前不接受答案。
想改善这个问题吗?更新问题,使其仅通过 editing this post 关注一个问题。
6年前关闭。
Improve this question
我正在尝试编写一个程序,该程序将生成重复字符的排列。到目前为止,我有 3 个循环:
这种方法缺乏通用性,因为它需要我事先知道排列长度。
示例:ABC
任何帮助,将不胜感激。
谢谢,
请注意,必须对进入此循环的第一次迭代的范围进行排序,以生成完整的排列列表 ( Demo #1 )。
您的示例从一组字符中生成具有重复项的所有组合。您可以使用嵌套循环,就像您所做的那样,或者使用递归:
Demo #2.
想改善这个问题吗?更新问题,使其仅通过 editing this post 关注一个问题。
6年前关闭。
Improve this question
我正在尝试编写一个程序,该程序将生成重复字符的排列。到目前为止,我有 3 个循环:
for (int f = 0; f < n; f++)
for (int s = 0; s < n; s++)
for (int t = 0; t < n; t++)
newString = characters[f] + characters[s] + characters[t];
这种方法缺乏通用性,因为它需要我事先知道排列长度。
示例:ABC
AAA AAB AAC ABA ABB ABC ACA ACB ACC
BAA BAB BAC BBA BBB BBC BCA BCB BCC
CAA CAB CAC CBA CBB CBC CCA CCB CCC
任何帮助,将不胜感激。
谢谢,
最佳答案
如果您需要排列(您的示例不是排列),C++ 标准库有一个完美的功能 - std::next_permutation
:
string s("ABC");
do {
cout << s << endl;
} while (next_permutation(s.begin(), s.end()));
请注意,必须对进入此循环的第一次迭代的范围进行排序,以生成完整的排列列表 ( Demo #1 )。
您的示例从一组字符中生成具有重复项的所有组合。您可以使用嵌套循环,就像您所做的那样,或者使用递归:
void combinations(const string& s, vector<int>& pos, int n) {
if (n == s.size()) {
for (int i = 0 ; i != n ; i++) {
cout << s[pos[i]];
}
cout << endl;
return;
}
for (int i = 0 ; i != s.size(); i++) {
pos[n] = i;
combinations(s, pos, n+1);
}
}
Demo #2.
关于用于生成排列的 C++ 代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28007090/