C++ 随机洗牌操作
我有以下代码C++ 随机洗牌操作,c++,C++,我有以下代码 #include <iostream> #include <cstdlib> using namespace std; int main() { int a[] = {2, 1, 4, 3, 5, 6, 7, 9, 8, 10, 11}; int n = sizeof(a) / sizeof(int); int k=0; for (int i = 0; i < n; i++) { k
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int a[] = {2, 1, 4, 3, 5, 6, 7, 9, 8, 10, 11};
int n = sizeof(a) / sizeof(int);
int k=0;
for (int i = 0; i < n; i++)
{
k = i + rand() % (n-1-i);
int s = a[i];
a[i] = a[k];
a[k] = s;
}
for (int i = 0; i < n; i++)
{
cout << a[i] << " " << endl;
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
INTA[]={2,1,4,3,5,6,7,9,8,10,11};
int n=sizeof(a)/sizeof(int);
int k=0;
对于(int i=0;i 我想如果I
(比如I==n-1),rand()%(n-1-I)
会给你一些值除以零。你可能想问问自己%(n-1-I)
对于I
n=11的所有可能值的结果是什么。当I=10时,这是k=I+rand()%0
Mod by zero是未定义的,可以以多种不同的方式操作。我见过它与Mod相当
无穷大,所以它将返回i作为i+RAND(),这会导致你的越界错误。< /P>可能在数组中的索引范围内,在k= i+RAND()中(n-1)i是的,我已经看到,RAND()% 0因为除以0而不能工作。@用户-SIDNEOTE: C++算法头已经有了一个函数。