对角线差异c

时间:2015-09-26 14:27:28

标签: c

请考虑以下代码。我必须找到C中两个对角线的区别。

public static void replaceRandom(Tree<T> tree, Node<T> newNode) { 
  // Find a random node
  List<Node<T>> nodeList = tree.getPreOrderTraversal();
  int globalIndex = (int) (Math.random() * nodeList.size());
  Node<T> old = nodeList.get(globalIndex);

  if (old.isRoot()) {
    // If it is the root, we just replace the root.
    tree.setRoot(newNode);
  } else {
    // Otherwise, we need to find the local index to replace it.
    Node<T> parent = old.getParent();
    int localIndex = parent.getChildren().indexOf(old);
    parent.removeChildAt(localIndex);
    parent.addChildAt(localIndex, newNode);
  }
}

当我将#include <stdio.h> int main() { int n,a[100][100],sum1=0,sum2=0; scanf("%d",&n); for(int i=0;i<n;++i) { for(int j=0;j<n;++j){ scanf("%d",&a[i][j]); if(i==j) sum1+=a[i][j]; else if((i+j)==(n-1)) sum2+=a[i][j]; } } if(sum1>sum2) printf("%d",(sum1-sum2)); else printf("%d",(sum2-sum1)); return 0; } 更改为else if时,代码运行正常。为什么呢?

1 个答案:

答案 0 :(得分:0)

我想我得到了你想知道的东西:

if(i==j) sum1+=a[i][j];
if((i+j)==(n-1)) sum2+=a[i][j];

表示两种情况都有效,因为您同时测试它们。

另一方面,如果你写

if(i==j) sum1+=a[i][j];
else if((i+j)==(n-1)) sum2+=a[i][j];

你假设这些条件中只有一个可以运行或者没有运行,但绝不会同时运行。因此,如果第一个词(i==j)true,则第二个词将不再被测试。但是你需要测试你想要计算的内容。实际上else if始终属于if,因此最多只能满足一个条件,而在另一个版本中,您只有两个独立的ifs