在 C++ 中创建蛮力算法 [关闭]
Posted
技术标签:
【中文标题】在 C++ 中创建蛮力算法 [关闭]【英文标题】:Creating a brute-force algorithm in C++ [closed] 【发布时间】:2017-07-31 19:09:45 【问题描述】:我正在尝试用 C++ 制作一个蛮力算法来解决问题。我之前在 Python 中制作了一个蛮力算法,但这使用了第 3 方库,这意味着我无法将其转换为 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
...
提前致谢:)
任何帮助表示赞赏:)
【问题讨论】:
这不是你代码的输出 你想对该字符串进行所有可能的排列等等...... 您没有每次都遍历字符串。我会为此使用一个字符数组。 这个问题更好的措辞是:“我想在给定字母表的语言中生成所有单词”en.wikipedia.org/wiki/Formal_language(虽然我的措辞有点令人困惑) 【参考方案1】:您生成所有排列的方法存在根本缺陷。即使您的代码中的错误已修复,它也不会按照您想要的方式运行。
简单地说,使用 2 级循环,您永远不会遇到“aaa”排列。
我个人会推荐一种递归方法,这是一个您可以解决的粗略起点:
#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;
【讨论】:
我非常喜欢这种递归方法:) 我不是那种抄袭别人的作品并声称是我自己的人,我喜欢自己编程和学习,但我一无所知。谢谢朋友,这真的很有帮助!我不经常使用堆栈溢出,我如何给你声望分? 只需将我的答案标记为已接受 (***.com/help/someone-answers)。很高兴能帮上忙。 这取决于版本 (msdn.microsoft.com/en-us/library/hh567368.aspx)。我正在使用的功能称为“基于范围的 for-loop”。根据该矩阵,它是在 MSVC 2012 中引入的。 更改我的代码以使用传统的 for 循环非常简单。我相信你可以从这里拿走它。以上是关于在 C++ 中创建蛮力算法 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章