这个简单代码的正统代码

时间:2017-02-22 05:44:17

标签: c++

我正在尝试制作一个随机数的数组[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;
    }

你能写一个比这更正统的代码吗?我正在学习

1 个答案:

答案 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);
}
相关问题