| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1466 人关注过本帖
标题:来看看这个题目,请大家提出效率高的方法
只看楼主 加入收藏
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
[CODE]#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int random(int low,int high){
int range = high-low+1;
return low+rand()%range;
}
void swap(int &a,int &b){
int t = a;
a = b;
b = t;
}

int main(){
srand((unsigned)time(0));
int a[100],i,j;
for (i = 0;i < 100;++i)
a[i] = i+1;
for (i = 0;i < 100;++i){
j = random(i,100);
if (i != j)
swap(a[i],a[j]);
}

for (i = 0 ;i < 100;++i)
cout << a[i] << " ";
cout << endl;
system("pause");
}[/CODE]

Fight  to win  or  die...
2007-08-12 12:10
未完成交响曲
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-8-12
收藏
得分:0 
我觉得提问题的人并没有把问题提清楚,这1000个数显然不是同时给出的。
也就是说,相当于顺序的每次给出一个数,但是每次给出的数都不同。并且在本身的
算法里面要求,每个数出现的概率都是1/1000。请问楼主是这个意思吗?

2007-08-12 13:31
小糊涂仙
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-8-5
收藏
得分:0 

rand()可以产生一个随机数,是吧?
我的意思就是一直用rand()产生1--1000之间的随机数,并且要求所产生的随机数字不能相同,就是这个意思啦~


谁能改变,人生的长度 我们都在不断赶路,忘记了出路 去不到终点,回到原点 享受,那走不完的路
2007-08-12 15:08
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 

random + seed ...
...
LZ你为什么不能换中思路呢?
问题已经很明显了, 你非要在随机数上纠缠...
若完全按你的方法, 那就
生成rand() -> 比较以前生成的结果 -> 生成... 直到不同 -> 存入...
这样当然效率低了...
就按前面aipb和我给的方法, 效率自然就高了, 而且也能保证是随机排列...


女侠,约吗?
2007-08-12 23:17
terisevend
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-2
收藏
得分:0 
又看到一个可以当成随机排列看待的问题了...

2007-08-12 23:53
快速回复:来看看这个题目,请大家提出效率高的方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016931 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved