Helft mal bitte einem c++ Anfänger :)
-
Hallo,
Ich versuche gerade ein ganz simples C++ Programm zu schreiben welches mir folgendes berechnet:
Man muss die Anzahl der Teams eingeben die im jeder-gegen-jeden verfahren gegeneinander spielen sollen. Ich möchte dann als Ausgabe die Anzahl der Spiele haben die es insgesamt gibt. Bei 5 Spielen gibt es ja 4+3+2+1=10 Matches bei 7 Spielen 6+5+4+3+2+1=21 Spiele und so weiter. (Lieg ich da mit meinem Denkansatz überhaupt richtig??)
Wie kann ich aber nun diese überlegung in C++ umsetzen? Ich glaub ich steh grad total aufm Schlauch und hoffe ihr könnt mir helfen!Gruss,
Oli
-
return 0;Ich denke das müsste so gehen:
#include <iostream> using namespace std; int main() { cout << "Wieviele Mannschaften sollen spielen?" << endl; int numb, erg; cin >> numb; erg = 0; for(;numb>0;--numb) { erg += numb; } cout << "Es nehmen " << erg << " Mannschaften teil" << endl; return 0; }
mfg
Glamdring
-
Hupsi, es müsste
for(;numb>0;--numb) { erg += numb-1; }
heißen
mfg
Glamdring
-
oder
while (numb-->0) erg += numb;
-
return numb*(numb+1)/2
wäre mein Vorschlag.
-
*g*
-
Bei mir ist das nicht gleich
Bsp: 10
9+8+7+6+5+4+3+2+1 = 45 //seine Methode
10*11/2 = 55 //deine MethodeBsp: 4
3+2+1 = 6
4*5/2 = 101.Differenz = 10
2. Differentz = 4Dann müsste es
return (numb*(numb+1)/2)-numb;
heißen, denn keine Mannschaft spielt gegen sich selbst
mfg
Glamdring
-
Jo, sorry nicht aufgepaßt, neue Lösung:
return (numb-1)*numb/2;
ähtsch, editiert.
-
Hier fehlt das /2, denn bei 10 käme sonst 90 raus :p
-
Wofür steht denn diese Zeile?:
using namespace std;
Da kann ich mit meinen bisherigen wintzigen c++ Kenntnissen noch nicht wirklich viel mit Anfangen. Wär super wenn mir das einer sagen könnte.
Gruss,
Oli
-
Der Namensraum std wird ausgewählt, somit kannst du mit allen Funktionen, die darin definiert sind, arbeiten.
Du kannst auch dasusing namespace std;
weglassen und dafür z.B.
std::cout << "test";
immer schreiben.
-
Ich würde es so machen:
int nMatches(int nGames) { if(nGames == 1) return 1; else return nGames - 1 + nMathces(nGames - 1); }
-
@Mis2Com:
Genau, warum einfach, wenn's auch kompliziert geht und noch dazu deutlich langsamer ist.Deine Lösung braucht für größere Zahlen mehr Zeit... meine braucht immer gleich lang.
-
Ok, also ich habe es jetzt so gemacht und es scheint zu funktionieren. Wie toll das jetzt is sei mal dahingestellt, aber von der Funktion her dürfte das doch alles so korrekt sein oder?
#include <iostream.h> int main(void) { int iTeams; int iSpiele; cout<<"Bitte die Anzahl der Teams eingeben :"; cin>>iTeams; for(iSpiele=0;iTeams>0;--iTeams) { iSpiele=int(iSpiele+iTeams-1); } cout<<"Es muessen "<<iSpiele<<" Spiele ausgetragen werden"<<endl; return 0; }
-
wo ist der mit-dem-Kopf-gegen-die-Wand-Smiley?
-
Ist es scheiss?
Sry aber ich lern C++ erst seid etwa ner Woche und habs halt noch net so ganz drauf hehe.
-
Naja, das funktioniert ja, aber ich frage mich, warum da unbedingt ne Schleife hin muß, wenn auch
(numb-1)*numb/2 das richtige Ergebnis liefert.
Das vereinfacht die Sache doch erheblich und macht den Code kürzer und schneller.MfG Jester
-
Ok, jetzt hab ich erst kapiert was du meinst. Logisch, da hast du natürlich recht. Naja immerhin hab ich mich auf dem weg schonmal ein wenig mit schleifen beschäftigt was ja sicherlich auch nicht schadet