【发布时间】:2016-04-06 23:03:21
【问题描述】:
我正在努力制作“洗牌”一组数字的算法,使它们从 0 开始按升序排序,下一个数字不能超过前一个 + 1,它们也必须有长度为 15,并且必须包括一组数字中的每个数字。例如,如果我们有数字:
0, 1
想要的输出是:
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1(是的,它们是 14 个零)
0,0,0,0,0,0,0,0,0,0,0,0,0,1,1
..
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1
如果数字是一样的
0、1、2
0,0,0,0,0,0,0,0,0,0,0,0,0,1,2(必须包含每个数字)
我尝试了以下方法,但失败了:
版本 1
private static List<List<int>> GetNumbers(int lastNumber)
{
if (lastNumber == 0)
{
return new List<List<int>> { new List<int> { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
}
int[] setOfNumbers = new int[lastNumber + 1];
List<List<int>> possibleRoutes = new List<List<int>>().ToList();
for (int i = 0; i <= lastNumber; i++)
{
setOfNumbers[i] = i;
}
var temp = new List<int>();
int[] possibleRoute = new int[15];
for (int j = 0; j < size - lastNumber; j++)
{
possibleRoute[j] = 0;
}
for (int j = lastNumber; j < possibleRoute.Length; j++)
{
for (int k = j; k > 0; k--)
{
possibleRoute[k] = lastNumber - 1;
}
for (int i = size - 1; i >= j; i--)
{
possibleRoute[i] = lastNumber;
}
possibleRoutes.Add(possibleRoute.ToList());
generalCounter++;
}
return possibleRoutes;
}
第 2 版
private static List<List<int>> GetNumbers(int lastNumber)
{
if (lastNumber == 0)
{
return new List<List<int>> {new List<int> {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
}
int[] setOfNumbers = new int[lastNumber + 1];
List<List<int>> possibleRoutes = new List<List<int>>().ToList();
for (int i = 0; i <= lastNumber; i++)
{
setOfNumbers[i] = i;
}
var temp = new List<int>();
int[] possibleRoute = new int[15];
for (int j = 0; j < size - lastNumber; j++)
{
possibleRoute[j] = 0;
}
for (int i = 1 ; i <= lastNumber ; i++)
{
int newNumber = lastNumber - i;
for (int k1 = i + 1; k1 <= size; k1++)
{
for (int j = possibleRoute.Length - 1; j > k1 - i - 1; j--)
{
possibleRoute[j] = lastNumber;
}
for (int k = i; k <= k1 - 1; k++)
{
possibleRoute[k] = newNumber;
}
possibleRoutes.Add(possibleRoute.ToList());
generalCounter++;
}
}
return possibleRoutes;
}
【问题讨论】:
-
你能证明你到目前为止所做的尝试吗?
-
现在您能解释一下您遇到的具体问题吗?什么不工作?请记住,本网站上的人是真实的人,他们在没有您告诉我们的情况下很难猜出您的想法。我们不会只看一眼你的代码就能看出它有什么问题,也不会把它“带回我们的办公桌”并花几个小时试图弄清楚如何让它工作。这个网站是关于具体的问题的。
-
好吧,代码完全被破坏了,那里有不止一个问题,老实说,我期待一种与我不同的方法,我真的没有人使用我的代码,因为它太糟糕了,我仍然是初学者,我发布它只是为了向您展示我已尽我所能但无法使其发挥作用。
标签: c# algorithm permutation