社区
C++ 语言
帖子详情
如何生成一个随机序列,不能重复
holilyboy
2004-08-03 08:24:24
如何生成一个 1----100 的随机排列的数列呢?
不能重复!
比如: 58,32,20,0,25,4,6,……
谢谢!
...全文
790
12
打赏
收藏
如何生成一个随机序列,不能重复
如何生成一个 1----100 的随机排列的数列呢? 不能重复! 比如: 58,32,20,0,25,4,6,…… 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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;
}
}
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,呈
随机
分布状态,且不
重复
。 【问题分析】:
生成
随机
数是简
python
生成
序列
_python如何
生成
随机
序列
?
生成
随机
序列
的两种方式:1、
生成
内容不
重复
的
随机
序列
>>> import random>>> s = [x for x in range(0, 10)]>>> s[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> random.shuffle(s)>>> s[8, 4, 1, 5, 2, 0, 7, 6, 9, 3]2、用random
生成
随机
序列
#
生成
一个
【0,10】长度为100...
如何
生成
随机
且不
重复
的
随机
序列
1. 问题引入 今天同学给我发了
一个
题目,让我做。题目是这样的: 2. 问题抽象 这个问题不难,相信高中生都可以做的出来,大致思路就是: 首先
随机
挑出k员工分为k组,这样可以保证每
一个
组至少有
一个
员工; 然后将剩余的员工
随机
分到k组中。 那么这么简单的题目为啥还要提一下呢?这是
一个
公司的笔试题,给60分钟解答时间。但是真的当我动手的时候,才发现这里有
一个
坑。 第一步中要求每次
随机
挑出
一个
员工,如何保证已经被挑出的员工不再参加分组?当然python有
一个
random.choice(),可以
随机
挑出
一个
,
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章