我有以下代码
#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;
}
但是它给了我运行时错误,我知道互联网上有很多方法,只是我选择了这么简单的大学考试准备,请帮我解决错误?
答案 0 :(得分:1)
如果rand()%(n-1-i)
(如i == n-1),我认为i
会为某些值提供除零。
答案 1 :(得分:1)
您可能想问自己%(n-1-i)
对i
的所有可能值的结果是什么。
答案 2 :(得分:0)
n = 11.当i = 10时,那是k = i + rand()%0;
Mod by zero未定义,可以以多种不同方式运行。我已经看到它相当于mod 无穷大,所以它将返回k作为i + rand(),这将导致你的越界错误。