日期:2014-05-17  浏览次数:20750 次

1-50,随机排序.相邻两个不能连续(即差的绝对值大于1)
 int[] arr = new int[50];
            List<int> li = new List<int>();
            for (int i = 1; i < 51; i++)
            {
                li.Add(i);
            }
            Random r = new Random();
            for (int i = 50; i > 0; i--)
            {
                int j = r.Next(0, i);
                if (i > 1 && i < 50 && Math.Abs(li[j] - arr[i]) < 2)
                {
                    i++;
                    continue;
                }
                else
                {
                    arr[i - 1] = li[j];
                    li.RemoveAt(j);
                }
            }

            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }
            Console.ReadLine();

我这写的在i==1的时候与前一位相差1判断不出来.
有没有比较严谨的办法?

------解决方案--------------------
生成之后判断,连续的话再生成,如此反复
------解决方案--------------------
引用:
引用:C# code?1234567891011121314         List<int> li = new List<int>();            Random r = new Random();            li.Add(r.Next(1,51));            while (li.Count < ……


你又没说不重复,,加个条件就可以了