Suche Rechenformel



  • 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 ....

    Sieg 1 = Punkt 1

    Siege 2 = Punkte2

    Siege 3 = Punkte 4

    Siege 4 = Punkte 6

    Siege 5 = Punkte 8

    Siege 6 = Punkte12

    Siege = Punkte 16

    Aber ich weiss nicht wie ich das als eine Formel oder so machen kann hat da wer eine idee ?



  • Steckt da irgendein System dahinter? Wenn ja, solltest du das vielleicht erklären. Sonst ist nicht sichergestellt, dass eine Formel, auch wenn sie auf diese Werte passt, so weitergeht, wie du dir das vorgestellt hast.



  • 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 Code

    set< 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


Anmelden zum Antworten