100分相送,取随机数算法

yibiaochen 2008-12-07 02:47:18
随机抽取1~1000000中的500000个数,不能重复取,尽可能效率高。

最好能附上代码
...全文
125 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yibiaochen 2008-12-07
  • 打赏
  • 举报
回复
谢谢大家,马上给分
oyzdz1988 2008-12-07
  • 打赏
  • 举报
回复
mark
oyljerry 2008-12-07
  • 打赏
  • 举报
回复
http://blog.163.com/tianshi_17th/blog/static/485641892008515111805/
hityct1 2008-12-07
  • 打赏
  • 举报
回复
mark
suilj 2008-12-07
  • 打赏
  • 举报
回复
zt:


洗牌即产生指定数据的随机序列。
在网上找了半天大体有两种做法
1、
思路:将54个数依次放到随机的位置。关键是每次找一个随机的位置。
下面是找这个随机位置的算法:
1、用一个Bool型数组记录各个位置是否已经放置了数,如果放置则置true,没有则为false。在算法开始时数组初始化为false。
2、每次产生一个0~53的随机数,看这个位置是否已经放置了数,如果已经放置了,则继续用同样的方法找一个随机位置判断;如果这个位置还未放置,则设置此位置,并标记其已经放置。
3、反复执行(2)直到所有的位置都放置了数为止。(只要设置成功54次数就说明所有位置已经设置了数)
例程:
void shuffle(int dest[],int n) //洗牌算法
{
int pos,card;
memset(dest,0,sizeof(int)*n);
for(card=1;card<=n;card++)
{
do
{
pos=rand()%(n+1);

}while(dest[pos]!=0);
dest[pos]=card;
}
}

上面方法的问题:随着未设置的数渐渐变少,寻找未设置的位置会越来越难。如果牌数很多则更是不可思议。

2、下面的思路是先对数组进行初始化然后随机交换两个位置,共交换n次,其中n越大,则随机越接近随机
void shuffle ( int a[], int n ) //洗牌算法
{
int tmp = 0,
p1,p2;
int cnt = rand() % 1023;
while (cnt--) //随机交换两个位置的数,共交换cnt次
{
p1 = rand() % n;
p2 = rand() % n;

tmp = a[p1];
a[p1] = a[p2];
a[p2] = tmp;
}
}

tailzhou 2008-12-07
  • 打赏
  • 举报
回复
可以采用洗牌算法,然后取偶数位置的或奇数位置的数就可以了;
绝对原创: 2008--2009年课程设计题目 设计题目:SPOOLING输出模拟系统 设计内容:编写算法,实现对SPOOLING输出模拟系统 设计要求: 1、包括一个SPOOLING输出进程和一个SPOOLING输出请求服务程序以及两个请求输出的进程。 2、请求输出进程每次调用请求服务程序输出一行信息,由输出请求服务程序将该信息项送如输出井。待输出一个结束标志时,表示一个输出文件输出完成,在输出井中形成一个输出信息块,并构成一个输出请求块,SPOOLING输出进程工作时,根据某输出请求块将输出井中相应信息块实际输出到打印机或CRT,SPOOLING进程与请求输出进程可并发运行。 3、进程调度采用随机调度法,这与进程的输出的随机性相一致。两个请求输出进程的调度概率各为45%,SPOOLING输出进程为10%,这由产生随机数来模拟。 4、 为进程设置三种基本运行状态:可执行、等待和结束。等待状态又可分成等待状态1和等待状态2。状态变换的条件如下: ①进程执行完毕后置成“结束态”。 ②服务程序在输出信息时,如发现输出井已满,将调用进程置成“等待状态1”。 ③SPOOLING进程在输出井空时进入“等待状态2”。 ④SPOOLING进程输出一个信息块后,应释放该信息块所占用的输出井空间,并将正在等待输出的进程置为“可执行态”。 ⑤ 服务程序在输出信息到输出井并形成信息块后,将SPOOLING进程置成“可执行态”。 设计报告: 1、给出主要算法流程图 2、给出用到的主要数据结构 3、给出测试数据和测试结果

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧