日期:2014-05-19  浏览次数:20703 次

从1,50随机20个不重复数
要求:不允许重复.我这么写的.觉得好傻
    ArrayList   list   =   new   ArrayList();
                        int   k   =   0;
                        do
                        {
                                  k   =random   .Next   (1,51);
                                  if   (!list.Contains(k))
                                          list.Add(k);
                        }
                        while   (list.Count   <   20);

------解决方案--------------------
List <int> numbers=new List <int> ();
List <int> result=new List <int> ();
Random rand=new Random();

for(int i=1;i <51;i++){
numbers.Add(i);
}
while(numbers.Count> 0){
int n=rand.Next(0,numbers.Count);
result.Add(n);
numbers.RemoveAt(n-1);//number.Remove(n);
}

//大概这样吧,没测试~~~
------解决方案--------------------
public static void Main()
{
int []a=new int[50];
Random ra=new Random();
for(int i=0;i <50;i++)
{
int str=ra.Next(0,49);
if(a[str]==0)
{
a[str]=i;
}
else
{
i--;
}
}
for(int j=0;j <50;j++)
{
Console.WriteLine(a[j]);
}
}
楼主可以试下我的方法
------解决方案--------------------
回复人:he_8134(只有星星伴明月)

哈哈,我写错了一点点~~~~
numbers.RemoveAt(n-1);//number.Remove(n);
----------
错的就是这一点点吧...


回复人:changkimkim()

LZ的已经不错了,没觉得还有什么更好的方法
--------------
LZ的方法不算傻...应该说是很常规的...但是更好的方法还是有的...

Random rnd = new Random();
byte[] keys = new byte[50];
rnd.NextBytes(keys);
int[] items = new int[50];
for (int i = 0; i < 50; i++)
{
items[i] = i + 1;
}
Array.Sort(keys, items);
int[] result = new int[20];
Array.Copy(items, result, 20);
return result;

------解决方案--------------------
http://blog.csdn.net/vrhero/archive/2007/07/29/1714682.aspx

总结了一下,写成一个通用方法...放在blog里...
------解决方案--------------------
vrhero:
请教一下啊,
1
rnd.NextBytes(keys);这个是不是用随即数把KEYS数组添满,那他啊里面会有重复的数吗?
2
Array.Sort(keys, items);他是怎么进行排序的,应该是根据KEYS里的元素进行排序吧,那KEYS里的元素要是重复了怎么办,这样能保证items里的前20个元素就是所要的元素吗??


------解决方案--------------------
good
------解决方案--------------------
to JL99000:

1.Random.NextBytes 方法将字节数组的每个元素均设置为一个 0 - 255 之间的随机数,既然是随机数自然难免重复,数组长度大于256时必然会有重复...

2.首先我们保证 items 的元素没有重复,其次 Array.Sort 方法的 QuickSort 算法执行不稳定排序,即使 keys 中两元素相等,对应 items 中的两元素顺序也不可预知,这不就是我们要的随机吗...