我从代数课上知道,对于ABC和123,我们可以为三个字母的字符串制作216种不同的排列,对吧? (6 x 6 x 6)我想用C ++创建一个控制台程序,它为上面的例子显示了可能的排列。问题是,我怎么会开始尝试计算它们。也许:
AAA BAA CAA 1BA 2BA 3CA 1AB 2BC 3CA
等
这真的很难问,但是我需要做些什么来确保我包含每个排列?我知道有216个,但我不知道如何真正去完成所有这些。
任何建议都将非常感谢!!!
答案 0 :(得分:3)
如果您需要固定数字字符串,可以使用N
嵌套循环(在您的情况下为三个)。
string parts = "ABC123";
for (int i = 0 ; i != parts.size() ; i++)
for (int j = 0 ; j != parts.size() ; j++)
for (int k = 0 ; k != parts.size() ; k++)
cout << parts[i] << parts[j] << parts[k] << endl;
如果N
未修复,则需要更通用的递归解决方案。
答案 1 :(得分:3)
使用递归非常容易。如果你有一个包含所有六个元素的数组,这里是java代码。我相信你可以轻松地将它翻译成C ++。
void getAllCombinations(List<String> output, char[] chrs, String prefix, int length) {
if (prefix.length() == length) {
output.add(prefix);
} else {
for (int i = 0;i < chrs.length;i++) {
getAllCombinations(output, chrs, prefix + chrs[i], length);
}
}
return;
}
这不是完美的,但它应该给你一般的想法。 使用参数运行它:空列表,可用字符数组,空字符串和所需字符串的长度。
答案 2 :(得分:0)
有三个嵌套循环(每个字符位置一个)迭代6个允许字符中的每一个,很难不看到每个可能的组合都有一组相应的循环索引,并且每组都有合法循环索引具有相应的3个字母字符串。循环索引和字符串之间的1-1对应就是你要找的东西,我收集了。