读书人

困惑random里面就是包含两个参数啊(

发布时间: 2012-10-15 09:45:24 作者: rapoo

困惑,random里面就是包含两个参数啊,(红色部分)为什么运行错误呢?请高手帮忙看看。
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
int *random(int num, int min, int max){//在[min,max]区间生成num个不相同的随机数
if( num > max-min )
throw range_error("range error") ;
int *result = new int[num];//用来保存随机生成的不重复的数
int tmp = -1;
bool repeat = false;
for (int i = 0; i < num; i++){
repeat = false;
tmp = random(min,max);// error : 'random' : function does not take 2 parameters
for (int j = 0; j < i; j++) {
if (tmp == result[j]){
repeat = true;
break;
}
}
if (!repeat) {
result[i] = tmp;
} else {
i = i - 1;//循环变量-1
}
}
return result ;
}
void main(void)
{
int Chrom[4];
cout<<"产生4个染色体,分别为4位的1到4的随机数排列如下:\n";
for(int i=1;i<5;i++){
cout<<"第"<<i<<"个染色体"<<endl;
Chrom[i]=*random(4,1,4);
cout << "Chrom["<<i<<"]=" <<*random(4,1,4);
cout<<endl;
}
cout<<endl;
}

[解决办法]
我给你一个比较好的方法。

C/C++ code
#include <iostream>#include <cstdlib>#include <ctime>#include <vector>#include <algorithm>using namespace std;int * random(int num, int min, int max){//在[min,max]区间生成num个不相同的随机数    if (num > max-min+1)                  //这里要加上1,因为是闭区间        throw range_error("range error") ;        int *result = new int[num]; //用来保存随机生成的不重复的数    int *temp = new int[num];    for( int i=0; i<num; i++){        //先生成num个随机数                temp[i]=rand()%10000;        result[i]=temp[i];    }    sort(result, result+num);        //再排列    for( int i=0; i<num; i++){        for( int j=0; j<num; j++){            if( temp[j]==result[i] ){                result[i] = min+j;            // 每个元素在原来数组中的下标就是一个随机排列                temp[j] = -1;            }        }    }    return result ;}void main(void){     srand((unsigned int)time(0));    int *Chrom;      cout<<"产生4个染色体,分别为4位的1到4的随机数排列如下:\n";    for(int i=0; i<4; i++){                    //应该是0到3        cout << "第" << i << "个染色体" << endl;        Chrom = random(4, 1, 4);        for( int j=0; j<4;j++)            cout << "Chrom[" << j+1 << "]:" << Chrom[j] << " ";        cout << endl;    }    cout << endl;}
[解决办法]
给一个简单的产生n个[a, b]区间上不重复随机数的代码,供参考:
C/C++ code
#include <iostream>#include <cstdlib>#include <ctime>#include <vector>#include <cassert>using namespace std;#define swap(a, b) do { \            int t = (a); a = (b); b = t; \        } while (0)int random_at_range(int ra, int rb){    if (ra > rb) swap(ra, rb);    return (ra + rand() % (rb - ra + 1));}#define N 1000int main(void){    /* 1~N范围内随机数来源 */    int src[N], dst[N];    for (int i = 0; i < N; i++)        src[i] = i;    /* 随机初始化 */    srand((unsigned int)time(NULL));    /* 产生范围[s, e]的n个随机数,并打印出来 */    int s = 100, e = 341, n = 40;    int k = 0;    for (int i = s; i <= s+n; i++)    {        int pos = random_at_range(i, e);        assert(s <= pos && pos <= e);        swap(src[i], src[pos]);        dst[k++] = src[i];        printf("%d, ", src[i]);    }    /* 验证产生的随机数是不重复的 */    assert(k-1 == n);    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {            if (i != j)                assert(dst[i] != dst[j]);        }    }    cin.get();    return 0;} 

读书人网 >C++

热点推荐