gpt4 book ai didi

c++ - 以随机顺序打印整数数组而不在C++中重复

转载 作者:行者123 更新时间:2023-11-30 05:09:15 26 4
gpt4 key购买 nike

我正在尝试实现 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++ 一段时间,想知道您是否可以提供帮助或至少为我指明正确的方向。谢谢!

最佳答案

除了可能存在的错误之外,您的方法相当低效,例如,您多次掷随机数以找到最后一个丢失的元素,而实际上根本不需要掷骰子。

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

void printRandom(int C[], int n, int seed) { 

D = C;
size = n;

for i = 1:n {
x = rand( [0... size) );

print element at D[x]

D[x] = D[size-1];

size--;
}
}

关于c++ - 以随机顺序打印整数数组而不在C++中重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com