我试图实现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 ++中抽出一些时间,想知道你是否可以帮助或者至少指出我正确的方向。 谢谢!
答案 0 :(得分:1)
除了可能的错误之外,你的方法效率相当低,例如你可以多次滚动随机数来找到最后一个缺失的元素,而这实际上根本不需要骰子滚动。
如果你跟踪已经使用过哪些索引,你可以避免这种“重新滚动直到索引有效”。在伪代码中:
chkconfig iptables off