随机数

kim_jinye 2010-11-03 05:39:05
要在1到100之间获得10个不同随机数,有什么简练的算法吗?
...全文
132 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamseyang 2010-11-04
  • 打赏
  • 举报
回复
学习下二楼的算法
Java_OneByte 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 brk1985 的回复:]
引用 3 楼 mstlq 的回复:

嗯,照2楼的做就可以了^_^


2楼没有做重复性判断。。。


C/C++ code

/* 在1到100之间获得10个不同随机数 */

#include <iostream>
#include <ctime>

using namespace std;

void main(){
const int size ……
[/Quote]
其实2楼的不用重复判断。。不会重复的。。害我看得莫名其妙
suhuaiqiang_janlay 2010-11-04
  • 打赏
  • 举报
回复
二楼的办法简洁实用。
kim_jinye 2010-11-04
  • 打赏
  • 举报
回复
感谢大家!来者有分!
ForestDB 2010-11-03
  • 打赏
  • 举报
回复
2L类似randon_shuffle,不会重复的。
某某9 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 brk1985 的回复:]

引用 6 楼 mstlq 的回复:

引用 5 楼 brk1985 的回复:
引用 3 楼 mstlq 的回复:

嗯,照2楼的做就可以了^_^


2楼没有做重复性判断。。。

二楼用类似于洗牌的办法,是不会有重复的^_^


我试验了下,2楼的方法,在1到100之间获得100个不同随机数,都有重复;;;而在1到100之间获得10个不同随机数,试了几次,发现确实都行的……
[/Quote]

仔细看了下,
我的算法其实跟2楼的差不多,原理应该是一样的。
绝对不会重复的。。。2楼的理解不了的话,看看我的。
某某9 2010-11-03
  • 打赏
  • 举报
回复
咱也献个丑,在1到100之间取得10的不同的随机数,各数不重复。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define N 100
void swap(int *arr, int s, int t);

int main()
{
int i;
int arr[N];
srand((unsigned int)time(NULL));
for(i = 0; i < N; i++)
{
arr[i] = i+1;
}
for(i = 0; i < N; i++)
{
swap(arr, i, rand()%(N-i)+i);
}
for(i = 0; i < 10; i++)
{
printf("%d\n", arr[i]);
}
return 0;
}

void swap(int *arr, int s, int t)
{
int temp = arr[s];
arr[s] = arr[t];
arr[t] = temp;
}

brk1985 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mstlq 的回复:]

引用 5 楼 brk1985 的回复:
引用 3 楼 mstlq 的回复:

嗯,照2楼的做就可以了^_^


2楼没有做重复性判断。。。

二楼用类似于洗牌的办法,是不会有重复的^_^
[/Quote]

我试验了下,2楼的方法,在1到100之间获得100个不同随机数,都有重复;;;而在1到100之间获得10个不同随机数,试了几次,发现确实都行的,没重复;可能100个数有1、2个数是重复的吧,2楼的应该是运气好,没有碰到重复吧。。。

看看以下的链接的说法
http://topic.csdn.net/t/20061205/10/5207220.html
独酌逸醉 2010-11-03
  • 打赏
  • 举报
回复
直接调用 random_shuffle()就行了。
mstlq 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 brk1985 的回复:]
引用 3 楼 mstlq 的回复:

嗯,照2楼的做就可以了^_^


2楼没有做重复性判断。。。
[/Quote]
二楼用类似于洗牌的办法,是不会有重复的^_^
brk1985 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mstlq 的回复:]

嗯,照2楼的做就可以了^_^
[/Quote]

2楼没有做重复性判断。。。


/* 在1到100之间获得10个不同随机数 */

#include <iostream>
#include <ctime>

using namespace std;

void main(){
const int size = 100;
const int N = 10;
int data[N];
srand(time(NULL));
for(int i=0; i<N; i++){
data[i]=rand()%(size+1);
for(int j=0; j<i; j++){//与已经生成的元素进行比较,如果有重复,重新生成
if(data[i]==data[j]){
data[i]=rand()%(size+1);
j = -1;//j重新初始化,再次判断是否重复
}
}
}
for(int i=0; i<N; i++)
cout<< data[i] <<endl;
system("pause");
}
無_1024 2010-11-03
  • 打赏
  • 举报
回复

#include <iostream>
#include <ctime>
using namespace std;

int main()
{
srand(time(0));
int num[10];
for(int i = 0;i < 10;i++ )
{
num[i] = 1 + rand()%100;
cout<<num[i]<<ends;
}
cout<<endl;
return 0;
}

mstlq 2010-11-03
  • 打赏
  • 举报
回复
嗯,照2楼的做就可以了^_^
昵称很不好取 2010-11-03
  • 打赏
  • 举报
回复
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

#define N 100

int main()
{
int rand_int = 0;
int i = 0;
int data[N];
int index = 0;
int num = N;
for (i = 0; i < N; i++)
{
data[i] = i;
}

srand((unsigned)time(0));
for(i=0; i<10; ++i){
index = rand()%num;
rand_int = data[index];
data[index] = data[num-1];
--num;
cout<<rand_int<<endl;
}

return 0;
}
一个七 2010-11-03
  • 打赏
  • 举报
回复
srand((unsigned)time(NULL));
int ran_num = 0;
for (int i = 0; i < 10; i++)
{
ran_num = rand() % 101;
cout << ran_num << " ";
}

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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