读书人

1-50,随机排序.紧邻两个不能连续(即差

发布时间: 2013-01-23 10:44:50 作者: rapoo

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 < ……


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


List<int> li = new List<int>(); 


Random r = new Random();
li.Add(r.Next(1,51));
while (li.Count < 50)
{
int n = r.Next(1,51);
if (!li.Contains(n)&&li[li.Count - 1] - n > 1
[解决办法]
n - li[li.Count - 1]>1)
li.Add(n);
}

for (int i = 0; i < li.Count; i++)
{
Console.WriteLine(li[i]);
}


[解决办法]

static void Main(string[] args)
{
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();
int j;
int f=0;
while (li.Count > 0)
{
j = r.Next(0, li.Count - 1);
if (f == 0)
{
arr[f] = li[j];
li.RemoveAt(j);
f++;
}
else if (Math.Abs(li[j] - arr[f - 1])>1)


{
arr[f] = li[j];
li.RemoveAt(j);
f++;
}
}

for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}
Console.ReadLine();
}
[解决办法]
从原来的数组里面提取数据,拿掉一个删掉一个,随即拿,满足条件的再拿(不相邻),拿完结束。随即排列完毕
[解决办法]

  var ary = Enumerable.Range(1, 50).ToArray();
int count = 0;
do
{
ary = ary.OrderBy(t => Guid.NewGuid()).ToArray();
count++;
}
while (ary.Where((t, index) =>
{
if (index > 0 && Math.Abs(ary[index] - ary[index - 1]) == 1)
return true;
else if (index < ary.Length - 1 && Math.Abs(ary[index + 1] - ary[index]) == 1)
return true;
return false;
}).Count() > 0);
ary.ToList().ForEach(t => Console.WriteLine(t));

[解决办法]
我看出是什么编程软件了........
[解决办法]
把arr改成List,当最后一个数不满足条件时,循环List,在相邻两个数和这个数差值大于2时,插进去就可以了。一定会有这两个数的,所以不会死循环了。

读书人网 >C#

热点推荐