用C ++创建一个暴力算法

时间:2017-07-31 19:09:46

标签: c++ algorithm c++11 brute-force

我正在尝试用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
...

提前致谢:)

感谢任何帮助:)

1 个答案:

答案 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;
}