ABCD=A^B*C^D vom Programm lösen lassen...?!

Diskutiere mit über: ABCD=A^B*C^D vom Programm lösen lassen...?! im Mac OS X Entwickler, Programmierer Forum

  1. Kryptaesthesie

    Kryptaesthesie Thread Starter MacUser Mitglied

    Beiträge:
    573
    Zustimmungen:
    6
    Registriert seit:
    17.05.2004
    Hallo.
    Ich habe hier eine Gleichung und möchte die gerne lösen:


    Gibt es eine vierstellige Zahl, für die folgendes gild?

    ABCD=A^B*C^D

    A, B, C und D sind nicht notwendigerweise verschieden!


    Bei meinem Entwurf komme ich leider nicht zu einem Ergebnis:
    Code:
    public class Loesen {
    
      
      private static long getTausender(long zahl) {
        return (zahl / 1000);
      }
      
      private static long getHunderter(long zahl) {
        return (zahl - (getTausender(zahl) * 1000)) / 100;
      }
      
      private static long getZehner(long zahl) {
        zahl -= getTausender(zahl) * 1000;
        zahl -= getHunderter(zahl) * 100;
        return (zahl / 10);
      }
      
      private static long getEiner(long zahl) {
        zahl -= getTausender(zahl) * 1000;
        zahl -= getHunderter(zahl) * 100;
        zahl -= getZehner(zahl) * 10;
        return (zahl);
      }
      
      public static void main(String[] args) {
        long zahl = 999;
        long rechts;
        
        if(zahl == 999) {
          do {
            zahl++;
            rechts = (getTausender(zahl)^getHunderter(zahl)) * (getZehner(zahl)^getEiner(zahl));
          } while(zahl != rechts && zahl < 10000);
          System.out.println("Gleichung: " + zahl + " = " + rechts);
        } else { System.out.println("Ungueltige Zahl!"); }
      }
    
    }
    
    
    Das Programm macht immer die 10000 Durchläufe.
    Stehe auf dem Schlauch, weiß nicht, wie ich weiter machen muss...?!


    MfG Gerrit
     
  2. richej

    richej MacUser Mitglied

    Beiträge:
    74
    Zustimmungen:
    3
    Registriert seit:
    26.10.2005
    Hmm... gibt es überhaupt eine Lösung? Evtl. kann er keine Zahl finden, weils keine gibt...
     
  3. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    Sind doch nur 10000 Zahlen. Brute Force, sage ich!

    Alex
     
  4. was dagegen ?

    was dagegen ? MacUser Mitglied

    Beiträge:
    323
    Zustimmungen:
    7
    Registriert seit:
    17.11.2006
    ich würde einfach jedes mal die Gleichung ausgeben lassen (oder in eine Datei schreiben) und dann mal per Hand reinschauen - dann siehst du ganz fix, falls an der Rechnung was nicht stimmt (weil er z.B. Blödsinn ausgibt) oder du kannst mal gucken, ob du das Ergebnis selber findest (sind j nur 8999 Gleichungen, da kann man mal drüber scrollen =))
     
  5. HäckMäc_2

    HäckMäc_2 MacUser Mitglied

    Beiträge:
    4.196
    Zustimmungen:
    269
    Registriert seit:
    26.04.2005
    Mir fällt auf Anhieb nur eine Lösung ein, die aber immer alle Kombinationen prüft (erschöpfendes Durchsuchen):
    Code:
    Loesung := 0;
    Links := 0;
    Rechts := 0;
    for A := 0 to 9 do begin
      for B := 0 to 9 do begin
        for C := 0 to 9 do begin
          for D := 0 to 9 do begin
            Rechts := A^B * C^D;
            Links := A*1000+B*100+C*10+D;
            if Rechts = Links then begin
              Loesung := Loesung+1;
              LA[Loesung] := A;
              LB[Loesung] := B;
              LC[Loesung] := C;
              LD[Loesung] := D;
            end;  {vom if}
          end;    {von Schleife A}
        end;      {von Schleife B}
      end;        {von Schleife C}
    end;          {von Schleife D}
    
    Die Anzahl der Lösungen steht in "Loesung" und die einzelnen Lösungen stehen in den Arrays LA bis LD.
     
  6. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    Oder (bischen schlampiger)
    Code:
    #include <stdio.h>
    #include <math.h>
    
    int main (int argc, const char * argv[]) {
    	int i;
    	unsigned char abcd[5];
    	
    	for (i=0; i <= 10000; i++)
    	{
    		double a, b, c, d;
    		int result;
    		
    		snprintf((char*)abcd,5,"%04d", i);
    		a = abcd[0]-'0';
    		b = abcd[1]-'0';
    		c = abcd[2]-'0';
    		d = abcd[3]-'0';
    		
    		result = pow (a, b) * pow (c, d);
    		if (result == i)
    			printf ("abcd = a^b*c^d gilt fuer %04d\n", i);
    	}
    	
        return 0;
    }
    Alex
     
  7. richej

    richej MacUser Mitglied

    Beiträge:
    74
    Zustimmungen:
    3
    Registriert seit:
    26.10.2005
    2592 ist das Ergebnis ;) .. du wolltest wahrscheinlich die Potenz von A^B bilden, da musst du Math.pow() verwenden..

    Meine Lösung:
    for(int i=1000;i<10000;i++)
    {
    string val = i.ToString();
    int a = Convert.ToInt32(val[0].ToString());
    int b = Convert.ToInt32(val[1].ToString());
    int c = Convert.ToInt32(val[2].ToString());
    int d = Convert.ToInt32(val[3].ToString());
    int result = (int)(Math.Pow(a,b)*Math.Pow(c,d));

    if(i==result)
    Console.WriteLine("A:"+a+" B:"+b+" C:"+c+" D:"+d+" Result: "+result);

    }
     
  8. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    Verrat doch nicht alles ;)

    Aber daran sieht man mal den Fluch moderner Rechner. Früher hätte man da noch richtig drüber nachdenken müssen, heute macht das sogar mein iMac in wenigen Augenblicken.

    Das Problem lässt sich ja sogar 1A parallesieren, da könnte man das auf dem Mac Pro auf vier Cores laufen lassen. Und dann ist nicht mehr mit Nachdenken, sondern einfach nur stupides Rechnen lassen :D

    Alex
     
  9. Kryptaesthesie

    Kryptaesthesie Thread Starter MacUser Mitglied

    Beiträge:
    573
    Zustimmungen:
    6
    Registriert seit:
    17.05.2004
    ach, musstest du's verraten?? :)

    Aber wunderbar, Math.pow(), das war es, was mir gefehlt hat. Mehr brauchte ich gar nicht ändern.

    Ach ja, zu den ersten 286ern soll das noch viele viele Stunden gedauert haben, bis das Ergebnis raus kam... :)


    Also, danke euch allen :)
    MfG Gerrit
     
  10. richej

    richej MacUser Mitglied

    Beiträge:
    74
    Zustimmungen:
    3
    Registriert seit:
    26.10.2005
    Hab gerade mal versucht zu messen wie lange es dauert, aber es scheint zu kurz zum messen zu sein ;) jedenfalls kam immer 0ms raus :D
     
Die Seite wird geladen...
Ähnliche Themen - ABCD=A^B*C^D vom Programm Forum Datum
Suche einfache IDE für C Mac OS X Entwickler, Programmierer 13.08.2016
C++ Programm von Windows zu Mac? Mac OS X Entwickler, Programmierer 05.05.2016
Buchtip für C++ Mac OS X Entwickler, Programmierer 13.10.2015
C: Array in Funktionsprototyp Mac OS X Entwickler, Programmierer 26.08.2015
C - Problem mit "fflush(stdin); wahl = getchar();" unter OSX? Mac OS X Entwickler, Programmierer 13.06.2015

Diese Seite empfehlen

Benutzerdefinierte Suche