2016-06-11 10 views
0

こんにちは私はN行N列の違いを得るためにこの次のコードスニペットを持っていますが、私に正しい答えを与えているようには見えません。それを紙やワークアウト、それは私にすべてのバグを与えるものではありませんが、私が受け取ることを期待する答えを与えるものではありません、私は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

に何を逃しています第二forであなたのifは常にtrue 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

関連する問題