2016-04-28 9 views
2

Ich muss 3 größte Zahlen in einem Array finden und sie dann zusammenfügen.Wie finden Sie 3 größte gerade Zahlen in einem Array mit C?

Zum Beispiel: Input: 4 7 10 3 11 16 16 23 26 Output: Die Summe der 3 größten gerade Zahlen ist: 16, 16, 26. Die Summe 58

In meinem Code ist, Ich bekomme merkwürdige Ausgaben wie "16, 1245782582792, 1".

Hinweis: Ich kann nur ifs/else, für/while-Schleifen und Arrays dafür verwenden.

#include <stdio.h> 
+0

Haben Sie selbst Debugging durchgeführt? Mit einem Debugger und/oder einer Debug-Print-Anweisung, um die Ausführung Ihres Programms zu verfolgen? – kaylum

+0

Sie scannen 9 Nummern und dann überprüfen Sie 13 Nummern. Sie sind außerhalb der Grenzen – Michi

+0

Wenn Ihre Eingabe "... 16 16 23 26" ist, wären die drei größten Zahlen nicht 16, 23 und 26 (= 65)? – dreamlax

Antwort

3

Es gibt ein paar Probleme hier:

  1. Sie sollten nur die Array-Einträge überprüfen, die festgelegt sind. Stattdessen betrachten Sie das gesamte Array, einschließlich des nicht definierten Teils von nNumbers bis MAX_NUMBERS-1. Sie werden wahrscheinlich Müllwerte dort abholen. Ändern Sie Ihre for Loops:

    for (i = 0; i < nNumbers; i++) 
    
  2. Du greatest1 Initialisierung usw. auf die erste Zahl in der Anordnung. Das funktioniert nicht, wenn die Zahl ungerade ist und groß genug ist, um die gerade Zahl zu blockieren.

  3. Wenn eine der größten geraden Zahlen mehr als einmal vorkommt, werden die Duplikate ignoriert. Wenn beispielsweise die größte Zahl 1000 ist und dreimal auftritt, möchten Sie wahrscheinlich alle drei hinzufügen und 3000 zurückgeben. Sie können dies beheben, indem Sie die von Ihnen ausgewählten Indizes nachverfolgen und nur ein Duplikat ablehnen, wenn der Index übereinstimmt , anstatt den Wert.

+0

Danke! Deine Antwort hat mir sehr geholfen :) Mein Code gibt keine Zufallszahlen mehr aus. Ich bin mir nicht sicher, wie ich das Tracking von Indizes machen soll, wie ich es noch nie zuvor getan habe (ich habe gerade vor 2 Wochen C programmiert). Könnten Sie ein Beispiel geben? – cheese425

+0

Nun, nehmen wir an, dass 'array [7]' 120 ist. Statt 120 in 'great1' zu behalten, behalten Sie 7 in' great1_ix'. Verwenden Sie 'array [greatest1_ix]' anstelle von 'great1', wenn Sie Werte vergleichen. Bis jetzt wird das Verhalten unverändert bleiben. Wenn du nach Duplikaten suchst, benutze 'greatest1_ix'. Auf diese Weise wird es nur als Duplikat erkannt, wenn es im selben Array in "Array" vorkommt. –

+0

Vielen Dank, ich schätze Ihre Hilfe wirklich :) – cheese425

Verwandte Themen