怎么给出不重复的随机值, 在线等...

hkx88 2004-11-05 03:58:21
比如随机出(1~100)中的随机值, 不重复, 还有怎么判断出已经从1~100随机一遍, 从而进入下一次随机.希望给我代码, 问题解决马上给分, 万分感谢..
...全文
207 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hkx88 2004-11-05
  • 打赏
  • 举报
回复
?
还有更好的办法吗?
yingpf 2004-11-05
  • 打赏
  • 举报
回复
哪有这么复杂啊,用time()就行
hkx88 2004-11-05
  • 打赏
  • 举报
回复
谢了, 各位热心的朋友~~
hkx88 2004-11-05
  • 打赏
  • 举报
回复
打勾然后给分就是了吗?
xuzheng318 2004-11-05
  • 打赏
  • 举报
回复
嘿嘿!
oo 2004-11-05
  • 打赏
  • 举报
回复
在帖子标题右边有个‘管理’,点进去就可以了
hkx88 2004-11-05
  • 打赏
  • 举报
回复
弱弱的问, 怎么给分, 怎么结贴??
languagec 2004-11-05
  • 打赏
  • 举报
回复
哇卡 写个程序的时间就被人先顶了 真是老了!
languagec 2004-11-05
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <time.h>
#include <algorithm>
using namespace std;
vector<int> v(100);
int Get_num()
{
int r=rand();
int n=v[r%v.size()];
v.erase(v.begin()+r%v.size());
return n;
}

void fun(int &i)
{
static s=0;
i=s++;
}

void main()
{
srand(time(0));
for_each(v.begin(),v.end(),fun);
for(int i=0;i<100;i++)
cout<<Get_num()<<'\t';
}
oo 2004-11-05
  • 打赏
  • 举报
回复
从别人的帖子里翻出来的:
#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+1);

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;
}
原理:一个100元素的vector,先放1-100,然后把vector里的内容random_shuffle一把,就是次序打乱一下。这就是你需要的100个元素,然后从0开始读到99,读完后再打乱一下这个vector就可以了。
寻开心 2004-11-05
  • 打赏
  • 举报
回复
楼主把随机数的概念搞错了吧

随机数不意味着没有重复
随机数是统计学上的东西,是做大量的试验,看平均规律的

你的要求的和随机数关系不见得很大,
还莫过于把1到100个元素顺序排列,然后随机交换内部两两的位置,经过多次交换操作后,整个顺序就打乱了。
你依次取就可以了。取完100个,再继续打乱顺序再次选择吧。
languagec 2004-11-05
  • 打赏
  • 举报
回复
初始化一个数组,从该数组中随机取数,取过的就仍掉,时间复杂度为O(1)
hkx88 2004-11-05
  • 打赏
  • 举报
回复
还是不行吧, 还是存在这个问题吧??
F4427 2004-11-05
  • 打赏
  • 举报
回复
随机的你可以算一下它的概率就知了
F4427 2004-11-05
  • 打赏
  • 举报
回复
用随机函数输出一个数字,然后用循环看是否已输出,若是已输出则去掉,再次随机,用嵌套就可以了
hkx88 2004-11-05
  • 打赏
  • 举报
回复
这样有问题吧?
如果到最后剩个8或其它某个数值没随机到, 那要随机多久才能随机到这个数值啊?
xuzheng318 2004-11-05
  • 打赏
  • 举报
回复
int i;
int j;
int t;
int a[10];

srand((unsigned)time(NULL));

for(i = 0; i < 10;)
{
t = rand() % 100;
for(j = 0; j < i; j++)
{
if(IsInArray(t))
continue;
else
{
a[i++] = t;
}
}
}

BOOL IsInArray(int t)
{
int i;

for(i = 0; i < 10; i++)
if(a[i] == t)
return TRUE;
return FALSE;
}

64,649

社区成员

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

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