C# 生成不重复的随机数

我们来看一个实例:

有一个一维数组,一共有10个元素,如何生成非负随机数来填充这个数组。
也就是说,我们如何生成10个不重复的非负数。如果我们直接用随机数的方式来做,肯定不行。
因为,理论上来讲,无论如何,这10个数,始终存在重复数的可能,只是概率的高低而已。
那么,我们如何生成真正不重复随机数了?

我这里的原理是这样:
1.设定一个数组,用来保存原始的非负数,这个数组的大小可以根据需要进行设定。这里设定为100,数组名为intTempArr。再设定一个数组,用来保存生成的无重复随机数,我们设定为:intArr,大小为10。
2.循环填充数组intTempArr,intTempArr中的数字为非负数,且不重复。我们设定intTempArr中的数字为:101-200。
2.随机生成一个在以上数组大小范围内的非负数(我们设定为:temp。也就是说随机生成一个数的范围为:0-99。
3.用以上的随机数temp为索引,得到数组intTempArr[temp]的值,我们设定为:tempValue。
4.将tempValue赋值给intArr,从数组intTempArr中删除值为tempValue的元素,也就是删除索引为temp的值。这样,下次生成随机数时,这个数字就永远也不会出现了。
5.重复以上2,3步,我们就可以实现无重复的随机数了。


下面是代码:
ExpandedBlockStart.gif 代码
public   void  getRand()
{
            Random rd 
=   new  Random();
            ArrayList intTempArr 
=   new  ArrayList();
int [] intArr  =   new   int [ 10 ];

// 填充数组intTempArr
for  ( int  i  =   101 ; i  <   200 ; i ++ )
{
                intTempArr.Add(i);
}

// 生成随机数
for  ( int  j  =   0 ; j  <  intArr.Length; j ++ )
{
int  temp  =  rd.Next(intTempArr.Count - 1 );
int  tempValue  =  ( int )intTempArr[temp];
                intArr[j] 
=  tempValue;
                intTempArr.RemoveAt(temp);
                Console.Write(
" intArr[ "   +  j  +   " ]= "   +  tempValue  +   " \n\r " );
}
}

 

转载于:https://www.cnblogs.com/arongbest/archive/2010/03/25/1694831.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值