2011-09-19 48 views
0

我有以下代碼隨機整理操作

#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

可能索引出陣列的邊界在k = i + rand()%(n-1-i) –

+0

是的,我已經看到,rand()%0不起作用,因爲被零除。 –

回答

0

n = 11。當i = 10時,這是一個k = i + rand()%0;

零點模式是未定義的,可以運行多種不同的方式。我已經看到它相當於mod infinity,所以它會返回k作爲i + rand(),這會導致你的越界錯誤。

1

我認爲rand()%(n-1-i)會給你一個零除以某些值如果i(如i == n-1)。

1

您可能想問自己%(n-1-i)的結果將會是i的所有可能值的結果。