Suche Rechenformel
-
int CalculateWinPoints (int iWins) { if (iWins == 1) return 1; else if (iWins != 0) return (iWins - 1) * 2; }Vorausgesetzt, es werden pro Sieg immer nur 2 Punkte hinzugefügt.
-
Wenns nicht lang (bzw. nicht endlos) und hartcodiert sein soll, kannste einfach einen vector (oder auch ein simples Array) benutzen:
const int punkteliste[MAX_SIEGE] = {0, 1, 2, 4, 8, 12, 16, /*...*/}; int main() { int gesiegt = wie_oft_hab_ich_gewonnen(); int punkte = punkteliste[gesiegt]; cout << "Du hast " << gesiegt << " mal gewonnen und dafuer " << punkte << "" Punkte bekommen!" << endl; ich_bin_fertig(); }
-
BitWax schrieb:
int CalculateWinPoints (int iWins) { if (iWins == 1) return 1; else if (iWins != 0) return (iWins - 1) * 2; }std::cout << CalculateWinPoints(0);ausgabe schrieb:
-
wenn du immer das doppelte nehmen würdest wäre das leichter...
#include <cmath> int calcScore(int intWins) { return pow(2, (intWins - 1)); }
-
@BitWax: Deine Lösung passt schon für 6 Siege nicht mehr zu den Vorgaben

@Bassmaster: Das fehlt eine zusammenhängende Formel - und aus dem Anfang kann man sehr viel ableiten.
-
BitWax schrieb:
int CalculateWinPoints (int iWins) { if (iWins == 1) return 1; else if (iWins != 0) return (iWins - 1) * 2; }Vorausgesetzt, es werden pro Sieg immer nur 2 Punkte hinzugefügt.
normalerweise sollte er das nicht kompilieren da nicht alle
Wege zum return führen!Oder?!
-
Basingstoke schrieb:
Normalerweise sollte er das nicht kompilieren da nicht alle Wege zum return führen!Oder?!
Doch, das ist nur undefiniertes Verhalten zur Laufzeit.
-
Naja, habe nicht Richtung hingeguckt bei der Beschreibung :p
Habe das relativ schnell hingeklatscht und auch nicht getestet...
-
BitWax schrieb:
Naja, habe nicht Richtung hingeguckt bei der Beschreibung :p
Habe das relativ schnell hingeklatscht und auch nicht getestet...Dann hättest du dir die Antwort auch sparen können.
-
Ja, entschuldige das ich helfen wollte und es ein falscher Lösungsweg war.
-
int calc(int Sieg){ if(Sieg==1) return 1; return (Sieg%5)*(((Sieg/5)+1) *2); }
-
Bassmaster schrieb:
Hallo
ich möchte für ein Spiel ein berechnungs Programm machen.Als nach einem Sieg bekommt der Spieler 1 Punkt nach 2 Siegen 2 Punkte und nach 3 Siegen 4 Punkte ....
Also die Folge 1,2,4,6,8,12,16,.. usw.
Folgender Codeset< int > punkte; for( int k = 10; k <= 1000; k *= 10 ) for( int j = 1; ; (j *= 2) %= k ) if( !punkte.insert( j ).second && j > k/10 ) break;erzeugt die Folge:
1 2 4 6 8 12 16 24 28 32 36 44 48 52 56 64 68 72 76 84 88 92 96 104 112 128 136
144 152 168 176 184 192 208 216 224 232 248 256 264 272 288 296 304 312 328 336
344 352 368 376 384 392 408 416 424 432 448 456 464 472 488 496 504 512 528 536
544 552 568 576 584 592 608 616 624 632 648 656 664 672 688 696 704 712 728 736
744 752 768 776 784 792 808 816 824 832 848 856 864 872 888 896 904 912 928 936
944 952 968 976 984 992.. das war doch offensichtlich
- oder nicht?Gruß
Werner
-
Sry meine Tabelle stimmte nicht ganz^^
Hier ist die richtige:Siege in Folge
1 1 Fame
2 2
3 3
4 4
5 6
6 8
7 12
8 16
9 20
10 24
11 28
12 32
13 36
14 40
jeder weitere Sieg 40 Fame
-
Werner Salomon kannste plz den Kompletten Source Code schicken ?
-
Bassmaster schrieb:
jeder weitere Sieg 40 Fame
Das geht doch noch:
int frame(int sieg) { int score[]={1,2,3,4,6,8,12,16,20,24,28,32,36}; return (sieg>=14)?40:score[sieg-1]; }Alternativ kann man das auch als abschnittsweise Funktion definieren:
int frame(int sieg) { if(sieg<=4) return sieg; else if(sieg<=5) return sieg+1; else if(sieg<=14) return 4*(sieg-4); else return 40; }
-
Musst du als Moderator immer alles so schnell verraten, lass doch die anderen auch mal antworten.

-
@CStoll schrieb:
Musst du als Moderator immer alles so schnell verraten, lass doch die anderen auch mal antworten.

Erstens lasse ich mir von anonymen **** nichts sagen - und zweitens habe ich nunmal die Angewohnheit, auf vernünftig klingende Fragen zu antworten.
-
Mit dir machen diese Ratespiele einfach keinen Spass. :p
mfg
anonymer star
-
Bassmaster schrieb:
Werner Salomon kannste plz den Kompletten Source Code schicken ?
hier ist er:
#include <algorithm> // copy #include <iostream> // cout, endl #include <iterator> // ostream_iterator #include <set> // set int main() { using namespace std; set< int > punkte; // -- erzeugt die Folge 1,2,4,6,8,12,16,... // Zahlen der Form 2^j (mod 10^k), wobei j und k positive ganze Zahlen sind // Bem.: hier enspricht k := 10^k und j := 2^j bzw. 2^j mod 10^k for( int k = 10; k <= 1000; k *= 10 ) for( int j = 1; ; (j *= 2) %= k ) if( !punkte.insert( j ).second && j > k/10 ) break; copy( punkte.begin(), punkte.end(), ostream_iterator< int >( cout, " " ) ); cout << endl; return 0; }siehe auch hier.
Gruß
Werner
-
hey, schlaue seite!