Programm zu finden größte und die zweitgrößte Zahl in array
Ich suchte viele websites, die für diese Frage. Sie tun es von einigen anderen Ansatz.
Dieser code ist nur nicht zu geben ist output, wenn I-input erste element eines Arrays als größte also a[0]
.
Ich denke, einige kleinere änderungen erforderlich.
kann mir jemand bitte mir sagen?
#include <stdio.h>
int main() {
int a[10], n;
int largest1, largest2, i;
printf("enter number of elements you want in array");
scanf("%d", &n);
printf("enter elements");
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
largest1 = a[0];
for (i = 0; i < n; i++) {
if (a[i] > largest1) {
largest1 = a[i];
}
}
largest2 = a[0];
for (i = 1; i < n; i++) {
if (a[i] > largest2 && a[i] < largest1)
largest2 = a[i];
}
printf("First and second largest number is %d and %d ", largest1, largest2);
}
Sortieren Sie Sie und nehmen Sie die letzten beiden Elemente. Wenn es irgendeine Art von übung, wir hatten nur eine Frage wie diese, es wurde immer die max-und min einer 4-element-array in 4 Vergleiche.
Die Sortierung ist nicht der beste Algorithmus, den Sie verwenden konnte, da. Die Sortierung hat eine Komplexität von O(n * log(n)) (wenn richtig gemacht), während Sie finden können, die maximal in einer linearen Zeit.
Ich sehe eine erste Ausgabe, hier mit der Initialisierung der largest2. Wenn a[0] ist die größte, die Bedingung der zweiten for-Schleife immer falsch sein, und largest1 und largest2 werden sowohl a[0].
Die Sortierung ist nicht der beste Algorithmus, den Sie verwenden konnte, da. Die Sortierung hat eine Komplexität von O(n * log(n)) (wenn richtig gemacht), während Sie finden können, die maximal in einer linearen Zeit.
Ich sehe eine erste Ausgabe, hier mit der Initialisierung der largest2. Wenn a[0] ist die größte, die Bedingung der zweiten for-Schleife immer falsch sein, und largest1 und largest2 werden sowohl a[0].
InformationsquelleAutor Bhart Kumar | 2017-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Werde ich ignorieren handling-Eingang, es ist nur eine Ablenkung.)
Der einfache Weg ist, zu Sortieren.
Aber das ist nicht das effizienteste, weil es
O(n log n)
, also als das array wird größer die Anzahl der Vergleiche ist größer schneller. Nicht zu schnell, langsamer als exponentielles, aber wir besser machen können.Können wir es in
O(n)
oder "linear time", also wie das array wird größer die Anzahl der Vergleiche wächst mit der gleichen rate.Schleife durch das array tracking der max, das ist der übliche Weg, um die max. Wenn Sie einen neuen max, der alte max wird der 2. höchste Zahl.
Anstatt eine zweite Schleife zu finden, die 2. höchste Zahl, werfen in einem speziellen Fall für den Betrieb in der 2. höchste Zahl.
Gibt es vielleicht einen eleganteren Weg, es zu tun, aber das tun Sie höchstens 2n Vergleiche. Am besten, es zu tun n.
Beachten Sie, dass es eine offene Frage, was zu tun ist mit
{ 1, 2, 3, 3 }
. Sollte die Rückgabe mit3, 3
oder2, 3
? Ich überlasse es Ihnen zu entscheiden, und entsprechend anpassen.InformationsquelleAutor Schwern
Wenn Sie brauchen, um zu finden, die die größte und zweitgrößte element in ein vorhandenes array, siehe die Antworten oben (Schwern Antwort enthält den Ansatz würde ich verwendet habe).
Jedoch, dass die größte und die zweitgrößte element in ein vorhandenes array weist normalerweise auf einen Konstruktionsfehler. Gesamten arrays nicht magisch erscheinen - Sie kommen von irgendwo, was bedeutet, dass der effizienteste Ansatz zu verfolgen, "aktuell größten und aktuellen zweitgrößte", während das array erstellt wird.
Zum Beispiel; für den ursprünglichen code werden die Daten aus den Benutzer; und durch die Verfolgung der "größte und zweitgrößte Wert, den der Benutzer eingegeben" innerhalb der Schleife, die bekommt Werte vom Benutzer des overhead-tracking werden die Informationen ausgeblendet werden, indem die Wartezeit für den Benutzer zum drücken von Schlüssel/s, die Sie nicht mehr benötigen, um eine Suche danach, während der Benutzer darauf wartet, für die Ergebnisse, und Sie müssen nicht mehr ein array an alle.
Es so sein würde:
InformationsquelleAutor Brendan
Müssen Sie zur Erhaltung der index der array-Mitglieder noch besser, als Sie sind einzigartige Hier einen funktionierenden code mit wenigen änderungen:
Beachten Sie, dass, wenn die array-Größe 1-Werte werden die gleichen sein.
InformationsquelleAutor Meninx - メネンックス
Die Frage ist zweideutig: wenn das array kann doppelte Werte enthalten, Sie sollten finden Sie die 2 größte verschiedene Werte oder die zwei größten möglicherweise identischen Werten?
Dein code scheint, um anzuzeigen, Sie wollen den ersten Ansatz, aber Sie haben ein problem, wenn der größte Wert ist
a[0]
. Sollten Sie eine zusätzliche Boolesche um zu verfolgen, ob Sie gefunden haben, einen anderen Wert noch.Sollten Sie auch testen, den Rückgabewert der verschiedenen
scanf()
Anrufe und return 0 vonmain()
.Hier ist eine modifizierte version:
InformationsquelleAutor chqrlie
Können Sie es tun am besten in einem Durchgang.
größten und largest2 eingestellt sind INT_MIN bei der Einreise.
Dann Schritt durch das array. Wenn die größte ist kleiner als die Anzahl, largest2 wird größten, dann die größte wird die neue Nummer (oder kleiner-als-oder-gleich, wenn Sie wollen, um Duplikate zulässig). Wenn größte größer ist dann die neue Nummer ein test largest2.
Beachten Sie, dass dieser Algorithmus skaliert der Suche nach der top drei oder vier in einer Reihe, bevor es zu umständlich ist und es ist besser zu Sortieren.
InformationsquelleAutor Malcolm McLean
Das problem mit deinem code ist ein Logik-problem (was die meisten Codierung ist über). Wenn die größte Zahl zuerst, dann bekommt es die zweitgrößte Anzahl falsch ... warum?
Gut, betrachten Sie Ihre Logik für die Entscheidung über die zweitgrößte Anzahl. Sie zuerst legen Sie es gleich auf das erste element im array und dann gehst du durch das array und den index ändern, wenn das element größer ist als der aktuelle zweite größte Zahl (die werden nie wahr, weil wir bereits so eingestellt, dass es die größte Zahl!).
Es zu lösen Sie können spezielle Fall: prüfen, ob die größte Zahl war die erste, und wenn ja, dann legen Sie es auf das zweite element (und dann spezielle Fall, dass das Problem von jemand Fragen zu finden, die höchsten zwei Elemente in einem array-element, ohne zu Lesen über das Ende eines array.)
Ich denke, dass die Methode in chqrlie Antwort auf dies alles in einem Durchgang ist am besten. Und logisch ist auch: ein Programm zu schreiben, finden die größte Zahl. Zweitgrößte Anzahl, das ist nur die eine, das war bisher die größte!
InformationsquelleAutor dave
//Ich denke, die einfache wie
InformationsquelleAutor Mukesh Burnwal Mike
Gibt es keine Notwendigkeit, die Dritte Schleife zu prüfen, die zweite größte Zahl im array. Sie können nur zwei Schleifen(eine für die insertion und die andere ist für die überprüfung.
Finden Sie diesen code.
Hoffe, dieser code wird für Sie arbeiten.
Genießen Kodierung 🙂
InformationsquelleAutor Nitish Gupta
Finden Sie Ihre zweite größte Anzahl ohne String-Funktion:
InformationsquelleAutor Sarat Patel
Hier ist eine Antwort mit einer einzigen for-Schleife.
InformationsquelleAutor TheTiger
InformationsquelleAutor lucky
Versuchen Sie dies:
InformationsquelleAutor Viraj Giri
Ausprobieren mit dabei:
InformationsquelleAutor Shourob Datta
Obwohl es getan werden kann in einem scan aber zu korrigieren einen eigenen code , müssen Sie erklären largest2 als int.Min da dies verhindert, dass die largest2 mit dem größten Wert intially.
InformationsquelleAutor Dhiren Chugh
InformationsquelleAutor ahmed jamil
Wenn Sie jemals brauchen, um zu finden, die größte oder die kleinste element in einem array versuchen mit bubble-sort.
Bubble-Sort funktioniert auf einfache Konzept der Verschiebung das größte element am Ende in jedem Durchlauf tut es (bei aufsteigender Reihenfolge). Da braucht man die erste und die zweite größte element in einem array, 2 Pässe von bubble sort wird den trick tun. Das Letzte element wird das größte und das vorletzte element ist die zweitgrößte.
Ich bin Ihnen mit dem link, werden Ihnen helfen, den bubble-sort-Konzept.
http://www.codeido.com/2010/10/bubblesort-written-in-c-with-example-step-by-step/
Hoffe, es hilft!!!
würde nicht die Komplexität O(n)? da wir bereits wissen, dass wir benötigen nur zwei zahlen nur. Obwohl, wenn wir verallgemeinert es, kein Zweifel, es kommen werde, um O(n^2), aber speziell hier sollte es nicht sein (konstant * O(n)) ? Bitte kann jemand erklären?
InformationsquelleAutor Tushar Gandhi