网站首页 手机版
 注册 登录
您现在的位置: 畅无忧设计 >> 系统编程 >> C++ >> 正文
最新文章
· 在VB中用DAO实现数据库编程
热门文章
 在VB中用DAO实现数据库编程
相关文章
没有相关文章
C++在较大范围内生成大量的无重复的随机数
来源:csdn博客 更新时间:2010/8/26 10:57:53 阅读次数:
字体:[ ] 我要投稿

C++在较大范围内生成大量的无重复的随机数,算法是用标准C++语言写的,其思想主要是先用系统的int本身作为初始值,每次获得一个随机数以后更新其int区域对应的初始值,其更新的值是当前可以达到的最大的数字,同时在下一个随机数产生之前修改最大生成的值,即减一:即缩小范围替代随机法

#include<iostream>  
#include<vector>  
#include<map>  
#include<time.h>  
#include <algorithm>  
 
using namespace std;  
 
typedef vector<int> v_int;  
typedef map<int,int> int_int;  
 
v_int GetRandom(int min,int max,int total);  
int main()  
{  
 v_int randoms = GetRandom(-100,100,180);  
 v_int::iterator it;  
 for(it=randoms.begin();it!=randoms.end();it++)//输出随机数  
 {  
  cout<< *it<<endl;;  
 }  
 
 cout<<"....................................."<<endl;  
 sort(randoms.begin(),randoms.end());//排序后输出,便于查看是否有重复的  
 //randoms  
 for(it=randoms.begin();it!=randoms.end();it++)  
 {  
  cout<< *it<<endl;;  
 }  
 
 int i;  
 cin>>i;  
 return 0;  
}  
 
/////////////////////////////////////  
 
//min:可以生成的最小的随机数(可以为负数)  
//max:可以生成的最大的随机数(可以为负数,但大于min)  
//total:一次调用生成的随机数的总数  
////////////////////////////////////  
v_int GetRandom(int min,int max,int total)  
{  
 if(total>max-min)  
  total = max - min;  
 v_int result;  
 int_int have;  
 int i,j,k,n,s,m;  
 s = max - min + 1;  
 m = max - min;  
 srand( (unsigned)time( NULL ) );   
 for(j=0; j<total; j++)                   
 {  
  k=rand() % s;  
  if(have.count(k) == 0)  
  {  
   n = k;  
  }  
  else 
  {  
   n = have[k];  
  }  
  if(have.count(m) == 0)  
  {  
   have[k] = m;  
  }  
  else 
  {  
   have[k] = have[m];  
  }  
  result.push_back(n+min);                          
  s--;                                 
  m--;                                 
 }  
 
 return result;  
}

  • 上一篇文章: 没有了
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 在线投稿 - 友情链接 - 网站地图 - 版权声明
    CopyRight 2008-2010, CWYDESIGN.COM - 畅无忧设计, Inc. All Rights Reserved
    滇ICP备09005765号