生成不重复的随机数算法

  有时我们需要从指定的数值范围内随机产生一个数,利用这个伪随机数去实现自己想要实现的东西。在园子里看了不少好文章和代码,发现zhoufoxcn实现这个算法的思路很好,尤其是第三个方法,
效率较好,便把这一skill记载了下来,虽然我们可以用诸如Random rand = new Random(Guid.NewGuid().GetHashCode()); int value = rand.next(intMin, intMax)代码实现,但程序员的最大
乐趣在于自己动脑,用不同的思路写出不同的算法。
  代码如下:
  
View Code
static List<int> GenerateNumber1()
{
List
<int> result =new List<int>(100);
Random random
=new Random();
int temp =0;
while (result.Count <100)
{
temp
= random.Next(1, 34);
if (!result.Contains(temp))
{
result.Add(temp);
}
}
return result;

}

static List<int> GenerateNumber2()
{
List
<int> container =new List<int>(33);
List
<int> result =new List<int>(6);
Random random
=new Random();
for (int i =1; i <=33; i++)
{
container.Add(i);
}

int index =0;
int value =0;
for (int i =1; i <=6; i++)
{
index
= random.Next(0, container.Count);
value
= container[index];
result.Add(value);
container.RemoveAt(index);
}

return result;
}

staticint[] GenerateNumber3()
{
// 用于存放1到33这33个数
int[] container =newint[33];
//用于保存返回结果
int[] result =newint[6];
Random random
=new Random();
for (int i =0; i <33; i++)
{
container[i]
= i +1;
}
int index =0;
int value =0;
for (int i =0; i <6; i++)
{
//从[1,container.Count + 1)中取一个随机值,保证这个值不会超过container的元素个数
index = random.Next(0, container.Length - i);
//以随机生成的值作为索引取container中的值
value = container[index];
//将随机取得值的放到结果集合中
result[i] = value;
//将刚刚使用到的从容器集合中移到末尾去
container[index] = container[container.Length - i -1];
//将队列对应的值移到队列中
container[container.Length - i -1] = value;

}
return result;
}

转载于:https://www.cnblogs.com/philanthr/archive/2011/08/02/2124689.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值