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();
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]);
}
{
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));