天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧软件 >> 正文

C++在较大范围内生成大量的无重复的随机数

2010-11-19不详佚名

   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;
    
    }

本文来源:不详 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。文章是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 Email:support@txwb.com,系统开号,技术支持,服务联系微信:_WX_1_本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行