Stelle der größten Zahl herausfinden
-
Wie kann ich es in einem C-Programm realisieren, dass es mir am Ende sagt, an welcher Stelle die größte Zahl steht.
Dabei wird eine Datei (.txt) eingelesen, in der 9 Zahlen untereinander stehen.
Das Einlesen ist nicht das Problem. Die Zahlen werden in einem Array eingelesen.
Wer kann mir einen Tipp geben?Gruß Ka-Sus
-
Hab in der Problemschilderung noch etwas vergessen!
Es sind 9 Zahlen, alle gleich, außer eine. Die ersten 3 und die nächsten 3 Zahlen werden gegeneinander gewogen. Sind diese gleich, muss die größere Zahl in dem letzten Drittel sein.
Wie bekomme ich die Stelle an der die Zahl steht?
-
[Den Zusatz habe ich erst jetzt gesehen]
-
int maxi=0; for(int i=1;i<9;++i) if(a[i]>maxi[i]) maxi=i; cout<<"die groesste zahl ist bei "<<maxi<<endl;
was die waage soll, weiß ich nicht. mit ein wenig unfug kann man an sowas denken:
if(a[0]+a[1]+a[2]>a[3]+a[4]+a[5]) { if(a[0]>a[1]) cout<<0<<endl; else if(a[0]<a[1]) cout<<1<<endl; else cout<<2<<endl; } else if(a[0]+a[1]+a[2]>a[3]+a[4]+a[5]) { ... } else { ... }
aber sowas muss man ganz grondlich plannen und uml-diagramme und struktogramme vorher malen.
-
volkard, kennst du das rätsel nicht?
Man hat 9 Kugeln - eine davon ist schwerer als die anderen. Man hat eine Waage mit zwei Schalen (also man vergleicht immer zwei Gewichte) und soll nun mit möglichst wenigen Wäägungen (schreibt man das wirklich so?) herausfinden, welche die schwere ist.
Die Lösung ist halt 2. Erst werden zwei mal 3 Kugeln mit einander gewogen, sind sie gleich, kann die schwere Kugel nur unter den letzten drein sein. Also werden zwei von den drein gewogen und sind die gleich, kann es ja nur die übriggebliebene sein.
Wenn jetzt die Aufgabe ist, diesen Lösungsweg 1:1 in C zu schreiben, dann muss man das tatsächlich so hübsch machen (if(a[0]+a[1]+a[2]>a[3]+a[4]+a[5])...).
-
Hallo,
Fluor du hast das Rätsel erfasst!
Aber soweit war ich auch schon (if( ...) ).Und das ganze muss in C stattfinden. Wie genau sage ich denn dem Programm, dass er mir die Stelle an der die größere Zahl steht, wiedergeben soll?
Ich brauch ja sicherlich irgendein Return-Wert oder nicht?Ich dachte, z.B.: if (...) return i. Aber woher nimmt er dieses i. Geht ja nicht. Und wenn ich sage z.B. return a[1], gibt er mir ja den Wert aus, der in a[1] steht. Und das ist ja nicht die Stelle an der die größere Zahl steht.
Versteht ihr?
-
Wie wäre es mit nem binary tree, der linke ast ist eine Schale und der Rechte,
jetzt rotierst du die Elemente darin so lange, bis auf beiden das gleiche Gewicht
vorhanden ist, oder du alle Elemente durch hast (dann geht es nicht).
-
Ka-Sus schrieb:
Ich dachte, z.B.: if (...) return i. Aber woher nimmt er dieses i. Geht ja nicht. Und wenn ich sage z.B. return a[1], gibt er mir ja den Wert aus, der in a[1] steht. Und das ist ja nicht die Stelle an der die größere Zahl steht.
hast du gelesen meinen code? hast du gesehen sowas wie
cout<<2<<endl;
das sein trick, der lösen dein problem.
wenn ich nähmlich ausgeben tue:cout<<a[2]<<endl;
dann tut nur die größere zahl ausgeben. so aber tut die stelle ausgeben, wo
größere zahl liegen tut.
außerdem tat ich das rätzel schon kennen.
und in C ist mein code auch.
was mache ich falsch (außer dass ich schlecht schreiben tue)?
-
Danke dir noch mal, Volkard. Auch wenn ich dich nicht gleich verstanden habe, was du mir sagen wolltest.
Mein Problem ist nun dank dir gelöst. Ich stand etwas auf dem Schlauch!
-
Ich kenn ein ähnliches Rätsel *hehe*. Ist aber etwas schwieriger:
Man hat 12 Kugeln. Eine dieser Kugeln ist entweder schwerer oder leichter. Man muss mit 3 Wiegungen herausfinden, welche Kugel es ist und ob sie nun schwerer oder leichter ist wie die anderen. Viel Spaß!