gpt4 book ai didi

c# - 算法:里程表/蛮力

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:58 27 4
gpt4 key购买 nike

我想用 C# 风格的语言编写一个类似里程表的方法,但不只是使用 0-9 作为字符,而是使用任何字符集。它或多或少会像一个暴力应用程序。

如果我传入从 0J 的字符数组,并将长度设置为 5,我想要的结果如 00000、00001、00002 ... HJJJJ, IJJJJJ, JJJJJ.

这是基础,请帮我扩展:

protected void Main()
{
char[] chars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };

BruteForce(chars, 5);
}

private void BruteForce(char[] chars, int length)
{
// for-loop (?) console-writing all possible combinations from 00000 to JJJJJ
// (when passed in length is 5)
// TODO: Implement code...
}

最佳答案

完全不是"recursion instead of multi-loops"的副本但它非常接近。如果这对您没有帮助,我会写一个解决方案。

编辑:这是一个非递归的解决方案。递归的有点难返回 IEnumerable<string>来自,但返回一个迭代器提供了一个很好的接口(interface) IMO :)

private static IEnumerable<string> GetAllMatches(char[] chars, int length)
{
int[] indexes = new int[length];
char[] current = new char[length];
for (int i=0; i < length; i++)
{
current[i] = chars[0];
}
do
{
yield return new string(current);
}
while (Increment(indexes, current, chars));
}

private static bool Increment(int[] indexes, char[] current, char[] chars)
{
int position = indexes.Length-1;

while (position >= 0)
{
indexes[position]++;
if (indexes[position] < chars.Length)
{
current[position] = chars[indexes[position]];
return true;
}
indexes[position] = 0;
current[position] = chars[0];
position--;
}
return false;
}

关于c# - 算法:里程表/蛮力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com