困惑,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;}