以随机顺序打印整数数组而不用C ++重复

时间:2017-09-19 14:07:54

标签: c++ arrays function random srand

我试图实现printRandom()函数,该函数应该重复选择并从数组C中删除一个随机条目,然后打印出所选的值,直到打印出数组C中的所有值。它们每个只能打印一次。

我只能使用cstdlib和iostream。到目前为止,这是我的函数代码:

void printRandom(int C[], int n, int seed) {
srand(seed);
int test[10] = { 21,-34,2,-42,89,24,11,4,13,-18 };

for (int i = 0; i < 10; i++)
{
    int r = rand() % 10;
    for (int j = 0; j < 10; j++) {
        if (r != C[j]) {
            C[i] = test[r];
            cout << C[i] << ' ';
        }
    }

}
}

这是我正在使用的主要功能:

int main() {
  int A[10], B[10] ;

  A[0] =  21 ;
  A[1] = -34 ;
  A[2] =   2 ;
  A[3] = -42 ;
  A[4] =  89 ;
  A[5] =  24 ;
  A[6] =  11 ;
  A[7] =   4 ;
  A[8] =  13 ;
  A[9] = -18 ;

  for (int i=0 ; i < 10 ; i++) {
     B[i] = A[i] ;
  }
  printRandom(B,10,38173410) ;

  for (int i=0 ; i < 10 ; i++) {
    B[i] = A[i] ;
 }
  printRandom(B,10,83103131) ;

 for (int i=0 ; i < 10 ; i++) {
    B[i] = A[i] ;
 }
  printRandom(B,10,77192102) ;

return 0 ;
}

现在我得到一大块数字

-34 -34 -34 -34 -34 -34 -34 -34 -34 -34 24 24 24 24 24 24 24 24 24 24 13 13 13 13 13 13 13 13 13 13 89 89 89 89 89 89 89 89 89 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 2 2 2 2 2 2 2 2 2 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 4 4 4 4 4 4 4 4 4 4 13 13 13 13 13 13 13 13 13 13 -18 -18 -18 -18 -18 -18 -18 -18 -18 -18 -34 -34 -34 -34 -34 -34 -34 -34 -34 -34 2 2 2 2 2 2 2 2 2 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 4 4 4 4 4 4 4 4 4 4 11 11 11 11 11 11 11 11 11 11 -34 -34 -34 -34 -34 -34 -34 -34 -34 -34 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 21 21 21 21 21 21 21 21 21 21 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 13 13 13 13 13 13 13 13 13 13 -34 -34 -34 -34 -34 -34 -34 -34 -34 -34 89 89 89 89 89 89 89 89 89 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 13 13 13 13 13 13 13 13 13 13 -42 -42 -42 -42 -42 -42 -42 -42 -42 -42 13 13 13 13 13 13 13 13 13 13 89 89 89 89 89 89 89 89 89 89 13 13 13 13 13 13 13 13 13 13

我从C ++中抽出一些时间,想知道你是否可以帮助或者至少指出我正确的方向。 谢谢!

1 个答案:

答案 0 :(得分:1)

除了可能的错误之外,你的方法效率相当低,例如你可以多次滚动随机数来找到最后一个缺失的元素,而这实际上根本不需要骰子滚动。

如果你跟踪已经使用过哪些索引,你可以避免这种“重新滚动直到索引有效”。在伪代码中:

chkconfig iptables off