C#制作一个已排序的数组

时间:2013-12-22 22:53:44

标签: c# arrays

我正在尝试制作一个不允许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;
        }

请不要更正代码,只是给我提示,我想自己解决。

1 个答案:

答案 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个相同的数字。