我正在尝试用C ++制作一个强力算法来解决问题。我以前在Python中使用过暴力算法,但这使用了第三方库,这意味着我无法将其转换为C ++。我非常喜欢这个设计,我找到了;
#include <iostream>
using namespace std;
int main() {
string characters = "abcde";
int length = 5;
string word = "";
for(int i = word.length(); i <= length; i++) {
for(int l = 0; l < characters.length(); l++) {
word += characters[l];
cout << word << "\n";
}
}
return 0;
}
,但由于某些错误,其输出为:
abcdeabcde
abcdeabcdea
abcdeabcdeab
abcdeabcdeabc
abcdeabcdeabcd
abcdeabcdeabcde
依旧...... 结果,我需要的是:
a
b
c
d
e
aa
ab
ac
ad
ae
ba
bb
bc
...
提前致谢:)
感谢任何帮助:)
答案 0 :(得分:4)
您生成所有排列的方法存在根本缺陷。即使你的代码中的错误被修复了,也不会按照你想要的方式运行。
简单地说,使用2级循环,你永远不会击中&#34; aaa&#34;排列。
我个人会推荐一种递归方法,这是一个可以解决的粗略起点:
#include <iostream>
#include <string>
void visit(std::string const& chars, size_t max_len, std::string const& cur) {
if(cur.length() == max_len) {
return;
}
else {
for(auto c : chars) {
std::string next = cur + c;
std::cout << next << std::endl;
visit(chars, max_len, next);
}
}
}
int main() {
visit("abcde", 5, "");
return 0;
}