int[] numArray = new int[100]; ArrayList list = new ArrayList(); Random ran=new Random(); int num; int prev=0; while (list.Count < 100) { num = ran.Next(1, 101); if (!list.Contains(num)) { if (prev == 0)//考虑到首数字可能是1 { list.Add(num); } else { if (Math.Abs(prev - num) != 1) { list.Add(num); prev = num; } } } } list.CopyTo(numArray); foreach (int i in numArray) { Response.Write(i + ","); }
int[] arrs = Enumerable.Range(1, 100).Select(s => s).ToArray(); int[] arrs2 = new int[10];//假定另一数组长度为10 Random rd = new Random(); int index=0; while (index < 10) { int num = arrs[rd.Next(0, 100)]; if (!arrs2.Contains(num)) { if (index == 0) { arrs2[0] = num; } else { if (Math.Abs(num - arrs2[index - 1]) == 1) { index--; } else { arrs2[index] = num; } } index++; } }
你看下这个,我一直认为是随机数量越大性能越高的List<int> list = new List<int>(); for (int i = 1; i <= 100; i++) { list.Add(i); }//取到1~100个数字 Random rand = new Random(); int[] num = new int[100];//存放随机数容器 for (int i = 0; i < num.Length; ) { int index = rand.Next(0, list.Count);//每次只取集合剩下的随机下标 if (i != 0) { if (num[i - 1] - list[index] <= 1 || list[index] - num[i - 1] <= 1)//判断是否是相邻的数字 { continue;//是的话继续循环 } else { num[i] = list[index];//不是相邻的就开始赋值 list.RemoveAt(index);//删除已经赋值给数组的数字,集合的大小在改变,方便下次取随机数 i++;//数组下标++ } } }
然后将其随机插入另一个数组B 是这样吗 要求是 数组B中的数前后不能相临
是不是只要从第一个数组中任意取数不相邻就行 还是数组A中的1-100个数都必须出现呢?
ArrayList list = new ArrayList();
Random ran=new Random();
int num;
int prev=0;
while (list.Count < 100)
{
num = ran.Next(1, 101);
if (!list.Contains(num))
{
if (prev == 0)//考虑到首数字可能是1
{
list.Add(num);
}
else
{
if (Math.Abs(prev - num) != 1)
{
list.Add(num);
prev = num;
}
}
}
} list.CopyTo(numArray); foreach (int i in numArray)
{
Response.Write(i + ",");
}
int[] arrs = Enumerable.Range(1, 100).Select(s => s).ToArray();
int[] arrs2 = new int[10];//假定另一数组长度为10
Random rd = new Random();
int index=0;
while (index < 10)
{
int num = arrs[rd.Next(0, 100)];
if (!arrs2.Contains(num))
{
if (index == 0)
{
arrs2[0] = num;
}
else
{
if (Math.Abs(num - arrs2[index - 1]) == 1)
{
index--;
}
else
{
arrs2[index] = num;
}
}
index++;
}
}
for (int i = 1; i <= 100; i++)
{
list.Add(i);
}//取到1~100个数字
Random rand = new Random();
int[] num = new int[100];//存放随机数容器
for (int i = 0; i < num.Length; )
{
int index = rand.Next(0, list.Count);//每次只取集合剩下的随机下标
if (i != 0)
{
if (num[i - 1] - list[index] <= 1 || list[index] - num[i - 1] <= 1)//判断是否是相邻的数字
{
continue;//是的话继续循环
}
else
{
num[i] = list[index];//不是相邻的就开始赋值
list.RemoveAt(index);//删除已经赋值给数组的数字,集合的大小在改变,方便下次取随机数
i++;//数组下标++
}
}
}