Euler Multiples of 3 and 5



  • Hallo liebe Community,

    da ich nächtes Jahr ein Informatik Studium beginnen möchte, habe ich mir vorgenommen ein paar Grundlagen für´s Stduium zu lernen. 😃
    Ich würde gerne C++ lernen und habe mir dafür ein tutorial durchgelesen in welchem ich kleine Übungen programmiert habe.

    Später bis ich auf die Seite project euler gelangt die sicherlich die meisten von euch kennen dürften.
    Dort habe ich mir das erste Problem ausgesucht: "Problem 1 Multiples of 3 and 5".

    Ich dachte mir das klingt doch gar nicht so schwer, also habe ich ein Programm zum lösen dieser Aufgabe geschrieben.

    Das Ergebnis war natürlich falsch... 😞
    Nachdem ich Stunden mit der fehlersuche verbracht habe und durch das Internet auch die richtige Lösung kannt, konnte ich meinen Fehler einfach nicht finden.

    Also habe ich den Taschenrechner in die Hand genommen und nachgerechnet.
    3+6+9+12+15+18... bis 999
    5+10+15+20+25... bis 995
    Das Ergebnis war 266333
    genau die Zahl die mein Programm errechnet hat. 😮

    Meine Frage lautet jetzt, wo ist mein Fehler oder habe ich die Aufgabenstellung falsch verstanden? 😕

    Mein Programm:

    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    	int a,b,c,d,e;
    	a=3;
    	b=5;
    	c=0;
    	d=0;
    	e=0;
    
    	while((c+a)<1000)
    	{
    		c=c+a;
    		d=d+c;
    
    	    cout <<"_" <<c;
    	}
    	cout <<"\n";
    
    	while((e+b)<1000)
    	{
    		e=e+b;
    		d=d+e;
    
    		cout <<"_" <<e;
    	}
    	cout <<"\nDie Zahl lautet " <<d;
    
    	return 0;
    }
    

    Ich weiß das mein Programm sicherlich nicht ideal ist und bin für verbesserungen offen 🙂

    mit freundlichen Grüßen
    Ottiro

    Mod-Edit: Code-Tags



  • Wenn du mit dem Taschenrechner das gleiche Ergebnis errechnest wie mit deinem Programm, das Ergebnis aber falsch ist, wirst du die Aufgabe wohl falsch verstanden haben.



  • Vermutlich sollte z.B. die 15 nicht doppelt berücksichtigt werden.



  • manni66 schrieb:

    Vermutlich sollte z.B. die 15 nicht doppelt berücksichtigt werden.

    so ist es. man addiere die vielfachen von 3, dazu die vielfachen von 5 und dann alle vielfachen von 3*5 davon abziehen.



  • Beispiel:

    #include <stdio.h>
    
    unsigned count (unsigned step)
    {
        unsigned s;
        unsigned sum = 0;
        for (s=step; s<1000; s+=step)
        {
            sum += s;
        }
        return sum;
    }
    
    int main(void)
    {
        unsigned cnt3 = count(3);  // 3en zählen
        unsigned cnt5 = count(5);  // 5en zählen
        unsigned cnt15 = count(15); // 15en zählen (LCM von 3, 5)
        printf ("%d\n", cnt3+cnt5-cnt15); // ergebnis
    }
    

    Nachtrag
    --------
    die count-funktion geht auch ohne Schleife, indem man eine Abwandlung der Gaußschen Summenformel verwendet ... https://de.wikipedia.org/wiki/Gaußsche_Summenformel



  • Vielen dank euch beiden, dass hatte ich nicht berücksichtigt 🙂


Anmelden zum Antworten