It would be nice to have comments in English, but, the your code does (second loop):
browse all rows
browse all cells
if i == j (is in main diagonal):
increase one sum
if i == n - i + 1 (the other diagonal)
increase the second sum
The much nicer and much more effective code (using n
, instead of n^2
) would be:
for( int i = 0; i < n; i++){
d += a[i][i]; // main diagonal
s += a[i][n-i-1]; // second diagonal (you'll maybe need to update index)
}
This goes straight trough the diagonals (both at the one loop!) and doesn't go trough other items.
EDIT:
Main diagonal has coordinates {(1,1), (2,2), ..., (i,i)}
(therefor i == j
).
Secondary diagonal has coordinates (in matrix 3x3): {(1,3), (2,2),(3,1)}
which in general is: {(1,n-1+1), (2, n-2+1), ... (i, n-i+1), .... (n,1)}
. But in C, arrays are indexed from 0, not 1 so you won't need that +1
(probably).
All those items in secondary diagonal than has to fit condition: i == n - j + 1
(again due to C's indexing from 0 +1
changes to -1
(i=0,
, n=3
, j=2
, j = n - i - 1
)).
You can achieve all this in one loop (code above).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…