Alle geraden Fibonacci Zahlen summieren



  • Piet!



  • Frage. Warum nicht so?

    int f1 = 0;
    int f2 = 1;
    int f3 = 0;
    
    for( int x = 0; f3 <= 4000000; x++)
    {
    	cout << f3 << endl;
    
    	f1 = f2;
    
    	f2 = f3;
    
    	f3 = f2 + f1;
    }
    


  • Und wo ist die Summe und wo alle geraden Zahlen? Da fehlt noch einiges.



  • #include <iostream>
    int main(){std::size_t b,s,f,a=s=b=(int)NULL+1;a=f=--s;while((f=a+b)<-1+4e6+((s+=f%2?(int)NULL:f,a=b,b=f)/1))a=b,b=f;std::cout<<s;}
    


  • Oops, so wars gedacht:

    #include <iostream>
    int main(){std::size_t b,s,f,a=s=b=(int)NULL+1;a=f=--s;while((f=a+b)<-1+4e6+((s+=f%2?(int)NULL:f)/1))a=b,b=f;std::cout<<s;}
    


  • ssdfsdf schrieb:

    (int)NULL+1
    

    Schlaue und kreative obfuscation ist was schönes, aber das ist doch einfach nur dämlich.



  • Nukularfüsiker schrieb:

    ssdfsdf schrieb:

    (int)NULL+1
    

    Schlaue und kreative obfuscation ist was schönes, aber das ist doch einfach nur dämlich.

    Hat einfach den Sinn, dass man nicht weiß wie NULL auf dem Compiler definiert ist. Ersetz es eben durch 1e0



  • habs noch etwas abgewandelt:

    #include <iostream>
    int main(){std::size_t b,s,f,a=s=b=1e3/1e2/1e1;for(a=f=(--s);(f=-(-a-b))<-1+4e6+((s+=f%2?0e0:f)/1);a=b,b=f);std::cout<<s;}
    


  • So fertig.

    #include <iostream>
    int main(){std::size_t _e0,_$,_o_,_0xFF=_e0=_$=1e3/1e2/1e1;for(_0xFF=_o_=(--_e0);(_o_=(0e0-1)*(-_0xFF-_$))<-1+4e6+((_e0+=_o_%2?0x0&0xFF:_o_)/1);_0xFF=_$,_$=_o_);std::cout<<_e0;}
    


  • Sorry, hab die Aufgabe nur halb gelesen...

    Aber so...????

    int f1 = 0; 
    int f2 = 1; 
    int f3 = 0; 
    
    for( int x = 0; f3 <= 4000000; x++) 
    { 
    	if(!(f3 % 2))
    	{
    		cout << f3 << endl; 
    	}
    
    	f1 = f2; 
    
    	f2 = f3; 
    
    	f3 = f2 + f1; 
    }
    


  • Man sieht das du die Aufgabenstellung nur halb gelesen hast. Versuch es noch ein Mal.



  • Omega_ schrieb:

    Man sieht das du die Aufgabenstellung nur halb gelesen hast. Versuch es noch ein Mal.

    Ja stimmt, hast recht 😉



  • Aber jetzt...

    Das war Step by Step 😃

    int f1 = 0, f2 = 1, f3 = 0, summe = 0;
    
    for( int x = 0; f3 <= 4000000; x++) 
    { 
    	if(!(f3 % 2))
    	{
    		summe += f3;
    	}
    
    	f1 = f2; 
    
    	f2 = f3; 
    
    	f3 = f2 + f1; 
    }
    
    cout << summe << endl;
    


  • Sieht nicht verkehrt aus, obwohl ich f3 % 2 == 0 bevorzugen würde.
    Jetzt kannst du dein Ergebnis mit der auf Seite 3 genannten Lösung vergleichen und siehst, ob du richtig liegst.
    Oder Schritt für Schritt nachrechnen.



  • Geschlossene Formel gefunden und Schleife und Rekursion weggemacht. 😋

    #include <cmath>
    #include <iostream>
    using namespace std;
    #define I pow(5,l
    #define l .5)
    
    int main(){
    double max=4000000;; //<-- Hier Obergrenze verstellen!
    cout<<int(int(pow((
    (I*l+l,3*floor(log(
    max*I+l/3/log((I*l+
    l)+1/l/I-l*l<<'\n';
    }
    


  • das ist ja zum Totlachen hier, wann schreitet endlich mal ein Moderator ein?
    Ja muß ich denn erst Drogen nehmen, um hier Antworten zu posten? 😃
    *rotfl*rotfl*

    In Assembler brauchst du bloß drei Register und die Ausgaberoutine.
    Angenommen AX=1 und BX=1 (alias Aerni und Bert)
    dann geht es weiter mit

    add eax,ebx
    add ebx,eax ;lustiges Fibonacci-PingPong

    add edi,gerade Zahl
    Genaugenommen ein Superlernbeispiel, etwas Asm-Code in sein C-Programm einzubauen.



  • #include <iostream> 
    int main(){ std::cout << 4613732 << std::endl; }
    

    Fertig. 😛



  • Fellhuhn schrieb:

    #include <iostream> 
    int main(){ std::cout << 4613732 << std::endl; }
    

    Fertig. 😛

    Dagegen habe ich die Obergrenze verstellbar gelassen.



  • nachtfeuer schrieb:

    In Assembler brauchst du bloß drei Register und die Ausgaberoutine.
    Angenommen AX=1 und BX=1 (alias Aerni und Bert)
    dann geht es weiter mit

    add eax,ebx
    add ebx,eax ;lustiges Fibonacci-PingPong

    add edi,gerade Zahl
    Genaugenommen ein Superlernbeispiel, etwas Asm-Code in sein C-Programm einzubauen.

    Das ist nicht so einfach. Die Schleife müßte zum Beispiel zwei Ausgänge haben. 😮
    Ein super Lernbeispiel, wie man sich verschätzen kann.

    nachtfeuer schrieb:

    das ist ja zum Totlachen hier, wann schreitet endlich mal ein Moderator ein?

    Ok, hiermit schreite ich ein.

    nachtfeuer schrieb:

    Ja muß ich denn erst Drogen nehmen, um hier Antworten zu posten? 😃
    *rotfl*rotfl*

    Das hast Du offensichtlich gemacht. Willkommen im Klub.



  • Mich würde mal interessieren, was du von meiner Lösung hältst, Volkard.

    #include <iostream>
    int main(){std::size_t _e0,_$,_o_,_0xFF=_e0=_$=1e3/1e2/1e1;for(_0xFF=_o_=(--_e0);(_o_=(0e0-1)*(-_0xFF-_$))<-1+4e6+((_e0+=_o_%2?0x0&0xFF:_o_)/1);_0xFF=_$,_$=_o_);std::cout<<_e0;}
    

Anmelden zum Antworten