您的位置:首页 > 职场人生

生成不重复的随机数 - 常考面试题

2011-09-27 09:36 267 查看
#include<iostream>

#include<time.h>

#define N 100

int a
;//结果数组

void swap(int& i,int& j)

{

int temp=i;

i=j;

j=temp;

}

int main()

{

int i=0;

for(i=1; i<=N; i++)

{

a[i]=i;

}

srand(unsigned(time(NULL)));

for(i=N-1; i>0; i--)

{

swap(a[i], a[rand()%i]);

}

return 0;

}

解决思路:

这个问题的实际应用就比如要随机生成一副扑克牌,54张,顺序是乱的,但显然牌面不能重复。用随机数生成器生成的数总是会重复的,所以,不能把生成的数直接保存下来作为结果。那么怎么办?

你想想,如果是真实的扑克牌,你是怎么打乱的?你会说:洗牌啊!没错,就是洗牌!洗牌是什么过程?说白了,是交换!把两摞牌交换位置,用类似的方法就可以解决楼主的问题。

先按顺序在数组里生成1-100的数,然后产生一对0-99之间的随机数,把这两个数所表示下标的数交换位置,如此重复几十次,原先的数组就被打乱了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: