用随机数实现

lijing3933 2007-11-15 04:06:37
怎样用C/C++实现,1至100随机排成一列,没有重复?给出高效算法
...全文
153 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2007-11-15
  • 打赏
  • 举报
回复
void Random::Generate(int *m_pTable, int m_iRange)
{
int loop, offset;

srand( (unsigned)time( NULL ) );
for(loop = 0; loop < m_iRange; loop++)
{
m_pTable[loop] = loop;
}

for(loop = 0; loop < m_iRange; loop++)
{
int tem;
offset = (rand() % m_iRange) + loop;
if( offset >= m_iRange)
offset -= m_iRange;

//将数字对调
tem = m_pTable[loop];
m_pTable[loop] = m_pTable[offset];
m_pTable[offset] = tem;
}
}
就是随机的交换就可以,其实调用库函数 random_shuffle ()就完全可以的。
kooris 2007-11-15
  • 打赏
  • 举报
回复
说一下我的思路,
首先把数组a[100]赋值,然后 循环100次 每次用rand函数生成1个数字,作为数组下标,和以循环的i做下标的数字换就是咯。
虽然感觉不是很random。但是模拟应该是还行把。
int ui_i = 0, ui_matrix[100];
srand( time(NULL) );
for( ui_i = 0; ui_i < 100; ui_i++ )
{
ui_matrix[ui_i] = i + 1;
}
for( ui_i = 0; ui_i < 100; ui_i++ )
{
swap( ui_matrix[ui_i], ui_matrix[rand() % 100] );
}
lan_6373836 2007-11-15
  • 打赏
  • 举报
回复

#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;

// random generator function:
ptrdiff_t myrandom (ptrdiff_t i)
{
return rand()%i;
}

// pointer object to it:
ptrdiff_t (*p_myrandom)(ptrdiff_t) = myrandom;

int main ()
{
srand ( unsigned ( time (NULL) ) );
vector<int> myvector;
vector<int>::iterator it;

// set some values:
for (int i=1; i<=100; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9....100

// using built-in random generator:
random_shuffle ( myvector.begin(), myvector.end() );

// using myrandom:
random_shuffle ( myvector.begin(), myvector.end(), p_myrandom);

// print out content:
cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;

cout << endl;

return 0;
}


呵呵,我写的,能实现了啊!你试试!
飞哥 2007-11-15
  • 打赏
  • 举报
回复
我帮你找找,这就是一个洗牌算法。搜搜
lijing3933 2007-11-15
  • 打赏
  • 举报
回复
我不想用标准库,我想实现这种算法,算法很多,越高效越好。
飞哥 2007-11-15
  • 打赏
  • 举报
回复
vector<int> v(100);

//赋值。
random_shuffle

64,643

社区成员

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

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