Doppelausgaben vermeiden



  • Ok, wir machen jetzt in der Schule Programmieren, und eine Aufgabe lautete:

    Ermitteln sie alle pythagoräischen Zahlentrippel bis zu einer einzugebenen Grenze.
    Bei einem derartigen Zahlentrippel ist die Summe der Quadrahte gleich dem Quadrat der dritten Zahl.

    Das Problem ist die Zusatzaufgabe: "Vermeiden sie Doppelausgaben wie 345 und 435". Denn ersten Teil der Aufgabe habe ich gelösst aber den Zusatz krieg ich einfach nicht hin. Ich wäre für jede Hilfe dankbar.

    Hier meine Lösung:

    /********************
    Programm:         pythago.cpp
    Kommentar:        berechnen von pythagoräischen Zahlentrippel
    Autor:            Christoph Schniedermeier
    letzte Aenderung: 19.11.2003
    ********************/
    #include<iostream.h>
    #include<math.h>
    
    int eingabe;
    int zahl1=0, zahl2=0, zahl3=0;
    double wert1, wert2;
    
    void main(void)
    {
    	cout << "Bitte geben Sie eine Zahl (int) ein:  ";
    	cin >> eingabe;
    	while(zahl1<eingabe)
    	{
    		zahl1++;
    		zahl2 = 0;
    		while(zahl2<eingabe)
    		{
    			zahl2++;
    			zahl3 = 0;
    			while(zahl3<eingabe)
    			{
    				zahl3++;
    				wert1 = pow(zahl1,2) + pow(zahl2,2);
    				wert2 = pow(zahl3,2);
    				if(wert1==wert2)
    				{
    					cout << zahl1 << "^2 + " << zahl2 << "^2 = " << zahl3 << "^2\n";
    				}
    			}
    		}
    	}
    
    }
    


    1. Versuch mal
    ...
    	while(zahl1<eingabe)
    	{
    		zahl1++;
    		zahl2 = zahl1;
    		while(zahl2<eingabe)
    		{
    			zahl2++;
    			zahl3 = zahl2;
    			while(zahl3<eingabe)
    			{
                        ...
    			}
    		}
    	}
    }
    

    Weiß aber nicht, ob da evtl. Zahlentripel fehlen, also erst mal testen...

    1. Ändere void main (void) bitte in int main() um

    2. Die Header sind deprecated

    #include<iostream> 
    #include<cmath> 
    using namespace std;
    


  • Leg dir einen std::vector an, in dem du alle ersten Zahlen speicherst, für die du einen Tripel gefunden hast.
    Wenn du dann einen Tripel findest, schaust du, ob eine der Zahlen schon im vector vorhanden ist, wenn ja, dann ist das ein doppeltes.

    Ich geh jetzt mal davon aus, das es für eine Zahl nur ein Tripel gibt, also nciht
    abc und ade, bin mir da jetzt aber nicht so sicher

    Gruß, Maxi



  • thx, fubar, funktioniert ziemlich gut.


Log in to reply