社区
C++ 语言
帖子详情
如何生成一个随机序列,不能重复
holilyboy
2004-08-03 08:24:24
如何生成一个 1----100 的随机排列的数列呢?
不能重复!
比如: 58,32,20,0,25,4,6,……
谢谢!
...全文
767
12
打赏
收藏
如何生成一个随机序列,不能重复
如何生成一个 1----100 的随机排列的数列呢? 不能重复! 比如: 58,32,20,0,25,4,6,…… 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
neverendstory
2004-08-04
打赏
举报
回复
定义一个数组,第一次产生一个随机数就写进去。
下次再产生随机数的时候,先比较有没有该随机数,有就重新随机,没有就写进去。
hmaple
2004-08-04
打赏
举报
回复
用vector解决这个问题。不需要很多次比较,效率能高点。
using namespace std;
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <time.h>
int main()
{
int buff[100];
int temp;
vector<int> myVec;
vector<int>::iterator ite;
for ( int i=0; i<100; ++i )
myVec.push_back(i);
srand((unsigned int)time(NULL));
for (int kk = 0; kk < 100; kk++)
{
temp = rand()% (100-kk);
buff[kk] = myVec[temp];
myVec.erase(myVec.begin() + temp);
}
for (int ii = 0; ii < 100; ii++)
{
cout << buff[ii] << endl;
}
return 0;
}
dodont
2004-08-04
打赏
举报
回复
不好意思,刚刚写错了,应该是:
楼主的意思是不是这个意思:
............
dodont
2004-08-04
打赏
举报
回复
楼主的意思是这个意思:
有一个集合{x,y,z...}执行下面的操作:
1.每次随机取一个数
2.在集合中把这个数去掉
3.重复1,2步,直至集合为空
如果是这个意思的话,那代码应该很好写的吧。用一个链表吧。
wmajia
2004-08-04
打赏
举报
回复
RookieStar(★)(巴巴罗萨)(DOOM3是我的噩梦)
给出了类似洗牌的算法。是OK的
RookieStar
2004-08-04
打赏
举报
回复
不能重复应不是随机数了,是随机数就有可能重复。
/////////////////////////////////////////////
同意这句话。
不过要实现也不难:
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;
int main()
{
int i,data[100],random;
srand(unsigned(time(NULL)));
for (i=0;i<100;++i) data[i]=i+1;
for (i=0;i<100;++i)
{
random=i+rand()%(100-i);
swap(data[i],data[random]);
}
for (i=0;i<100;++i)
{
cout<<setw(4)<<data[i];
if (i%10==9) cout<<endl;
}
return 0;
}
hmaple
2004-08-04
打赏
举报
回复
srand()是设置随机数列的种子,种子相同,随机数列也相同。
每次循环都重新设置种子,就会重新产生一个随机数列。
由于循环很快,所以两次循环取得时间有可能是相同的,种子相同,随机数列就相同,所以你的buffer里有很多相同的数。
应该改成这样:
srand((unsigned)time(NULL));
for (int kk = 0; kk < 100; kk++)
{
temp = rand()% 100;
buff[kk] = temp;
}
但这样不能保证这一百里面没有重复数字。如果不想要重复数字,需要判断新产生的随机数是否已经有了。
antijpn
2004-08-04
打赏
举报
回复
楼主要的是随机序列,不是随机数(虽然随机序列需要由随机数生成)
下面的代码是生成随机序列的,稍微修改一下就可以适应更大范围的序列
#include <time.h>
#include <iostream>
void func();
void main()
{
func();
}
void func()
{
int ia[100],obj[100];
srand((unsigned int)time(NULL));
for(int i=100;i>0;i--)
{
obj[100-i]=rand()%i;
ia[100-i]=100-i;
}
for(int i=0;i<100;i++)
{
for(int j=0;j<=obj[i];j++)
{
obj[i]+= ia[j]==-1?1:0;
ia[j]= j==obj[i]?-1:ia[j];
}
std::cout<<(obj[i])<<((i+1)%10?' ':'\n');
}
}
一叶还真不知秋
2004-08-03
打赏
举报
回复
不能重复应不是随机数了,是随机数就有可能重复。
rorot
2004-08-03
打赏
举报
回复
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> ivec(0, 100);
for ( int i=0; i<100; ++i )
ivec.push_back(i);
std::copy( ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, " ") );
std::cout << "\n\n";
std::vector<int>::iterator it = ivec.begin();
std::vector<int>::iterator it_end = ivec.end();
std::random_shuffle( ivec.begin(), ivec.end() );
std::copy( it, it_end, std::ostream_iterator<int>(std::cout, " ") );
return 0;
}
antijpn
2004-08-03
打赏
举报
回复
光是rand的话很可能就有重复,因为不能保证每次rand的结果不同
而且srand的种子是time,这个东西的单位是second,而循环太快了,很多次的种子都一样,所以就会产生相同的随机数
可以给你一个思路,每次生成的随机数对还需要生成的随机数数量取余,然后根据这个来排定位置,等会儿我会给出一个代码
holilyboy
2004-08-03
打赏
举报
回复
为什么buff[] 里的值会相同呢??
#include <iostream>
#include <ctime>
using namespace std;
void ff(void);
void main(void)
{
ff();
}
void ff(void)
{
int temp;
int buff[100];
srand((unsigned)time(NULL));
memset(buff, -1, sizeof (buff));
for (int kk = 0; kk < 100; kk++)
{
srand((unsigned)time(NULL));
temp = rand()% 100;
buff[kk] = temp;
}
for (int ii = 0; ii < 100; ii++)
{
cout << buff[ii] << endl;
}
}
Python专题精讲
随机
与抽样
实际项目中经常遇到
随机
、伪
随机
、
随机
生成
整数、浮点数、
随机
抽样、
生成
随机
字符
序列
等需求,正确处理
随机
与抽样问题,是一个程序员的必修技能。本课程详细介绍Python语言使用random标准库来完成
随机
数、
随机
抽样的方法,并实例演示如何
生成
随机
字符
序列
(
随机
密码)的应用场景。
lua
生成
一个
随机
序列
不
重复
开发游戏时经常遇到需要写一个
随机
序列
不
重复
比如1~20
生成
一个
随机
序列
不
重复
其实很简单就是先有一个顺序
序列
{1, 2, 3, 4, 5, ... ,20}然后 local r = math.random(i, 20)利用 a[i], a[r] = a[r], a[i]交换一下 就可以 这个很简单,这是其中的一种做法, 但是我今天自己想出了另外一种解法 总体思路是一样的 代码他的好处就是...
生成
随机
序列
的算法c语言,一个C语言编写的不
重复
随机
序列
算法
一个C语言编写的不
重复
随机
序列
算法最近一直搞数据库,很久没摸C语言,都快忘了。为了练手,前段时间一个没有完成的产生不
重复
随机
序列
的算法重写一遍。C语言没有
随机
种子值的概念,所以产生一个
随机
、不
重复
序列
还不太容易。最常归的思路是:给定一个范围,然后做rand() %MAX_VALUE运算,如果发现该值已经取过,则重新产生一个值。这个算法,你会发现随着,当MAX_VALUE值大到一定程度时(我的测试值...
非
重复
随机
序列
生成
算法
最近编程时遇到一个问题:有一组对象,要求
随机
地访问其中每一个对象,并且每个对象只访问一次。如果我们将访问顺序转换为一组整数
序列
,那么这就是一个关于“非
重复
随机
序列
生成
算法”的问题。 本文将探讨这个问题的多种解法,并给出一个非常高效的算法。 【问题描述】:有一个自然数N,希望得到一个整型
序列
,该
序列
包含N个整数,从0到N-1,呈
随机
分布状态,且不
重复
。 【问题分析】:
生成
随机
数是简
C++ 语言
64,683
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章