随机随机操作

时间:2011-09-19 15:35:16

标签: 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 = 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;
}

但是它给了我运行时错误,我知道互联网上有很多方法,只是我选择了这么简单的大学考试准备,请帮我解决错误?

3 个答案:

答案 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(),这将导致你的越界错误。