2016-06-11 100 views
0

嗨我有以下代碼片段獲得在N乘N數組中的差異,但它似乎並沒有給我正確的答案我得到了算法,通過繪製N乘N矩陣紙和工作出來,它沒有給我任何的錯誤,但不給我,我期望得到答案,那我在第二for錯過了N乘N矩陣的對角差

//includes here 
int main(){ 
    int n; 
    int diagOne{0}; 
    int diagTwo{0}; 
    cin >> n; 
    vector< vector<int> > a(n,vector<int>(n)); 
    for(int a_i = 0;a_i < n;a_i++){ 
     for(int a_j = 0;a_j < n;a_j++){ 
      cin >> a[a_i][a_j]; 
      if (a_i==a_i){ 
       diagOne+=a[a_i][a_j]; 

      } 
      else if(a_i+a_j==n-1) { 
       diagTwo+=a[a_i][a_j]; 
      } 

     } 
     int sum =abs(diagOne -diagTwo); 
    } 
    return 0; 
} 
+0

你能發佈預期的/實際的答案嗎?另外,如果代碼沒有給你正確的答案,那麼你的代碼就有錯誤。謝謝! :) – Rakete1111

+0

打開更多的編譯器警告,這是編譯器可以爲您捕獲的簡單錯字。 –

+0

對不起,我不太明白你在做什麼。你是否試圖計算[主對角線](https://en.wikipedia.org/wiki/Main_diagonal)和反對角線之間的差異? – Judge

回答

1

if始終是真實的a_i==a_i

+0

謝謝Ive更新瞭解決方案,但它似乎沒有給出正確的答案 – Rza

+0

它的工作原理感謝 – Rza

0

除了@Milos Radosavljevic的回答,您的int sum =abs(diagOne -diagTwo);會覆蓋每一個外部循環。爲了解決這個問題,它在外部循環之外。 Here is a live demo of the fixed version of your code

請注意,這將計算主對角線和反對角線之和(跡線減去反跡線)之間的差異。但是,如果你是在元素方面的差異之後,那麼你可以do this

+0

這很危險地接近評論領域。 – erip

+0

@erip是的我同意,雖然我現在已經加入,所以它都回答OP的問題,並提出我的建議。感謝您的反饋。 – Judge