我正在尝试制作一个不允许3个相同数字彼此靠近的数组。谁能告诉我我做错了什么?
我想要的输出:
Input 1 4 2 4 4 4 5 3 9 5 6
Output
First Pass : 1 4 2 4 4 5 4 3 9 5 6
Second Pass : 1 4 2 4 5 4 4 3 9 5 6
Third Pass : 1 4 2 4 5 4 3 4 9 5 6
代码:
int[,] numbers = new int[10, 10];
Random randoms = new Random();
for (int i = 0; i < numbers.GetLength(0); i++)
{
for (int j = 0; j < numbers.GetLength(1); j++)
{
int skaitlis;
do
{
skaitlis = randoms.Next(1, 6);
}
while (!DrikstPievienotx(skaitlis, i, j, numbers) && !DrikstPievienoty(skaitlis, i, j, numbers));
numbers[i, j] = skaitlis;
Console.Write(numbers[i, j] + "\t");
}
Console.WriteLine();
}
}
static bool DrikstPievienotx(int sk, int x, int y, int[,] arr)
{
if (x > 1)
{
if (arr[x - 1, y] == sk && arr[x - 2, y] == sk)
{
return false;
}
}
return true;
}
static bool DrikstPievienoty(int sk, int x, int y, int[,] arr)
{
if (y > 1)
{
if (arr[x, y - 1] == sk && arr[x, y - 2] == sk)
{
return false;
}
}
return true;
}
请不要更正代码,只是给我提示,我想自己解决。
答案 0 :(得分:0)
你的条件是假的,试着去了解它的真正含义...
现在,每当此条件成立时,您正在寻找新的数字:
!DrikstPievienotx(skaitlis, i, j, numbers) && !DrikstPievienoty(skaitlis, i, j, numbers)
所以,如果你在x轴上有3个相同的数字 AND ,如果你在y轴上有3个相同的数字,你再试一次。 如果你想避免两者,你应该做更多:
!DrikstPievienotx(skaitlis, i, j, numbers) || !DrikstPievienoty(skaitlis, i, j, numbers)
如果你在x轴上有3个相同的数字,那么女巫会再试一次或如果你在y轴上有3个相同的数字。