我正在尝试制作一个随机数的数组[6](没有重复)
void rnd::process(void){
rndArr[0] = (1+rand()%(45-1));
assign1:
rndArr[1] = (1+rand()%(45-1));
if(rndArr[1]==rndArr[0])goto assign1;
assign2:
rndArr[2] = (1+rand()%(45-1));
if((rndArr[2]==rndArr[1])||(rndArr[2]==rndArr[0]))goto assign2;
assign3:
rndArr[3] = (1+rand()%(45-1));
if((rndArr[3]==rndArr[2])||(rndArr[3]==rndArr[1])||(rndArr[3]==rndArr[0]))goto assign3;
assign4:
rndArr[4] = (1+rand()%(45-1));
if((rndArr[4]==rndArr[3])||(rndArr[4]==rndArr[2])||(rndArr[4]==rndArr[1])||(rndArr[4]==rndArr[0]))goto assign4;
assign5:
rndArr[5] = (1+rand()%(45-1));
if((rndArr[5]==rndArr[4])||(rndArr[5]==rndArr[3])||(rndArr[5]==rndArr[2])||(rndArr[5]==rndArr[1])||(rndArr[5]==rndArr[0]))goto assign5;
}
你能写一个比这更正统的代码吗?我正在学习
答案 0 :(得分:0)
void rnd::nextNumber(int n) { // private method
bool diff;
do {
rndArr[n] = 1 + rand() % (45 - 1);
diff = true;
for (int i = 0; i < n && diff; ++i) diff = rndArr[n] != rndArr[i];
} while (!diff); // at least one equal
}
void rnd::process() {
for (int i = 0; i < 6; ++i) nextNumber(i);
}