2016-06-11 152 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