2014-02-15 56 views
0

我想在一個二維數組上對角地迭代。我用[N*N]大小的普通陣列,而不是使用[N][N]陣列。之後,我製作了索引。 這是我要打印(例如)爲什麼我得到訪問衝突運行時錯誤?

1 3 6 10 
2 5 9 13 
4 8 12 15 
7 11 14 16 

的結果應該是這樣的數組:

int n, temp[2], nums[100 + 10]; 
cin >> n; 
for (int i = 0; i < n * n; i++) 
    cin >> nums[i]; 

temp[0] = temp[1] = 0; 
for (int i = 0, cnt = 0; i < n; i++, cnt += 5) { 
    temp[1] = temp[0]; 
    for (int j = 0; j <= i; j++) { 
     cout << nums[temp[1]] << " "; 
     temp[1] -= n - 1; 
    } 
    temp[0] += n; 
} 

temp[0] -= n - 1; 
for (int i = n - 2, cnt = temp[0]; i >= 0; i--, cnt -= 5) { 
    temp[1] = temp[0]; 
    for (int j = 0; j <= i; j++) { 
     cout << nums[temp[1]] << " "; 
     temp[1] -= n - 1; 
    } 
    temp[0] += 1; 
} 

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 

我用下面的代碼完成我認爲它應該工作,但我不知道爲什麼我訪問衝突運行時錯誤。 謝謝。

+0

訪問衝突發生在哪裏? –

+0

@RaymondChen不幸的是我不知道!這是一個ACM問題,該網站告訴我,您在測試用例#4中存在訪問衝突,我不知道測試用例是什麼。這是問題的鏈接: http://acm.timus.ru/problem.aspx?space=1&num=1313 – Rasool

+0

它在這裏工作http://ideone.com/eW1Yrx與您的輸入 –

回答

1

在你的鏈接1 ≤ N ≤ 100這意味着nums數組應該能夠存儲高達100 * 100 = 10000的值。

0

首先我的朋友,你使用的是哪種編譯器? 如果borland的turbo,那麼你可能想切換到另一個,因爲這是一個常見的錯誤,因爲我已經經歷過。 你的代碼似乎是正確的,並且通過在Code :: Blocks中執行相同的代碼(複製粘貼),我得到了你所提到的輸出。所以,你的程序是正確的。

+0

我用code :: blocks使用visual C++ 2010! 感謝您回答我,請閱讀上面的意見,我完全解釋了我的問題。謝謝;) – Rasool

+0

「特定的測試案例」嗯..你能提到那些測試用例嗎? –

+0

不幸的是沒有!因爲該網站不讓我看到測試用例! 這裏是鏈接。 http://acm.timus.ru/problem.aspx?space=1&num=1313 – Rasool

1

不管怎麼說: 網站稱1 < = N < = 這意味着最大可能的數組,你需要的是 max(N*N)這爲10,000整數。你發佈的代碼已經爲110個整數元素分配了數組,這顯然是不夠的。 在讀取第一個for循環中的輸入數字期間,可能會發生訪問衝突,因爲i會變爲n*n,這可能大於數組的大小。

+0

我想接受你的答案,但有人比你早一點回答。 +10聲望也不錯! :D謝謝哥們:) – Rasool

相關問題