Berechnen Sie die Summe der Diagonalen in einer Matrix

8

Ich muss die Summe von zwei Diagonalen in einer Matrix in C ++ berechnen, ich habe bereits eine Lösung dafür, aber ich muss dumm sein, weil ich nicht verstehen kann, was es tut, also würde ich gerne wissen, ob es eine andere Version gibt was ich verstehen kann. Hier ist der Code, der die Aufgabe erfüllt:

%Vor%

Der Teil, der schwer zu verstehen ist, ist

%Vor%

Hier ist der gesamte Code, den ich geändert habe, aber er funktioniert nicht für die sekundäre Diagonale:

%Vor%     
Igor Ivanovski 25.01.2012, 18:55
quelle

5 Antworten

18

Es wäre schön, Kommentare auf Englisch zu haben, aber der Code tut es (zweite Schleife):

%Vor%

Der viel schönere und viel effektivere Code (mit n anstelle von n^2 ) wäre:

%Vor%

Dies geht direkt durch die Diagonalen (beide an der einen Schleife!) und geht nicht durch andere Gegenstände.

BEARBEITEN:

Die Hauptdiagonale hat die Koordinaten {(1,1), (2,2), ..., (i,i)} (daher i == j ).

Sekundäre Diagonale hat Koordinaten (in Matrix 3x3): {(1,3), (2,2),(3,1)} was im Allgemeinen ist: {(1,n-1+1), (2, n-2+1), ... (i, n-i+1), .... (n,1)} . Aber in C werden Arrays von 0 indiziert, nicht von 1, so dass Sie +1 (wahrscheinlich) nicht benötigen.

Alle Elemente in der sekundären Diagonale müssen in die Bedingung passen: i == n - j + 1 (wieder aufgrund der Indexierung von C von 0 +1 ändert sich in -1 ( i=0, , n=3 , j=2 , j = n - i - 1 )).

Sie können dies alles in einer Schleife (Code oben) erreichen.

    
Vyktor 25.01.2012, 19:02
quelle
4
%Vor%

}

Um diesen Algorithmus besser zu verstehen, sollten Sie eine Matrix auf Ihr Notizbuch malen und seine Elemente mit ihrer Position in der Matrix nummerieren, dann wenden Sie den Algorithmus Schritt für Schritt an. Ich bin 100% sicher, dass Sie verstehen werden

    
boyd 25.01.2012 18:59
quelle
3

Wie wäre es, wenn ich versuche, diese Version zu erklären? : D

Es gibt 3 wichtige Teile des Codes:

  • Eingabe der Matrix
  • Berechnung der Hauptdiagonalen (\ Richtung)
  • Berechnung der Nebendiagonale (/ Richtung)

Und hier sind sie, erklärt:

%Vor%

Hier enthalten d und s die Inter-Werte von Dur- bzw. Moll-Diagonale. Am Ende von 2 Schleifen enthalten sie die Ergebnisse

%Vor%

Hoffe, das hilft.

Beachten Sie, dass dieser Code Matrixkoordinaten bei 1 anstelle von 0 startet. Daher müssen Sie (n+1)x(n+1) Leerzeichen für die Matrix zuweisen:

%Vor%

vor der Verwendung.

Auch der von Ihnen angegebene Code ist nicht sehr effektiv. Es hat O(n^2) Komplexität, während die Aufgabe in O(n) wie folgt ausgeführt werden kann:

%Vor%     
penelope 25.01.2012 19:03
quelle
0
%Vor%     
Abdul Rehman 24.05.2016 19:24
quelle
0

Sie müssen i + j == n + 1 anstelle von i + j == n - 1 für die sekundäre Diagonale verwenden, d. h.

%Vor%     
Tnahsoe Tnhsen 04.03.2018 07:55
quelle

Tags und Links