Zahlenrätsel programmieren

vince191

Mitglied
Hallo zusammen, ich bin neu hier und auch neu in der Java Programmierung.

Ich muss folgende Aufgabe lösen und komme überhaupt nicht weiter, vielleicht kann mir jmd weiterhelfen...

Schreiben Sie ein Programm, das das folgende Symbolrätsel löst, indem alle Ziffernkombinationen durchprobiert und alle gültigen Kombinationen ausgegeben werden.
H E S
+ T H E
-------
B E S T

Dabei soll folgendes beachtet werden:

Es ist nicht zulässig, dass zwei verschiedene Buchstaben für die gleiche Zahl stehen.

Schreiben Sie Ihr Programm zunächst so, dass es keine führende Null gibt, d.h. H, T und B müssen ungleich Null sein. Wieviel Lösungen gibt es?

Hier ist mein Quellcode das ich bis jetzt geschrieben habe, nur wenn ich es ausführe, kommen sehr viele unterschiedliche Ergebnisse, da ist bestimmt noch ein Fehler den ich nicht finden kann.

Java:
public class ZahlenRaetsel
{
    public static void main(String args[])
    {
        int h,e,s,t,b;
        for (h = 1; h <= 9; h++ )
        {
            for (e = 0 ; e <= 9; e++)
            {
                 for (s = 0; s <=  9; s++)
                 {
                    for (t = 1 ; t <= 9; t++)
                    {
                        for (b = 1; b <= 9; b++)
                        {
                                if (h != e && h != s && h != t && h != b &&
                                    e != s && e != t && e != b &&
                                    s != t && s != b &&
                                    t != b)
                                    
                            {
                                int hes = 100 * h + 10 * e + s;
                                int the = 100 * t + 10 * h + e;
                                int best = 1000* b + 100 * e + 10 * s + t;
                                System.out.println(best);
                            }       

                                                                  
                        }
                    }
                }
            }
        }
    }
}

Danke im Voraus :-D
 
Zuletzt bearbeitet von einem Moderator:
Du musst überprüfen, ob das Ergebnis mit der zusammengesetzen Zahl übereinstimmt, siehe Code:

Java:
public class ZahlenRaetsel
{
    public static void main(String args[])
    {
        int h,e,s,t,b;
        for (h = 1; h <= 9; h++ )
        {
            for (e = 0 ; e <= 9; e++)
            {
                for (s = 0; s <= 9; s++)
                {
                    for (t = 1 ; t <= 9; t++)
                    {
                        for (b = 1; b <= 9; b++)
                        {
                            if (h != e && h != s && h != t && h != b &&
                                    e != s && e != t && e != b &&
                                    s != t && s != b &&
                                    t != b)

                            {
                                int hes = 100 * h + 10 * e + s;
                                int the = 100 * t + 10 * h + e;
                                int best = 1000* b + 100 * e + 10 * s + t;
                                //Du musst überprüfen, ob das Ergebnis mit der       zusammengesetzen Zahl übereinstimmt
                                int test = hes + the;
                                if(best == test) {
                                    System.out.println(best);
                                }
                            }


                        }
                    }
                }
            }
        }
    }
}
 
Zuletzt bearbeitet:
Hallöchen zusammen,

ich habe habe nun nach Kensta1561 beispiel mein Code vervollständigt...
nun bekomme ich als Ergebnis 1268.

Java:
public class ZahlenRaetsel
{
    public static void main(String args[])
    {
        int h,e,s,t,b;
        for (h = 1; h <= 9; h++ )
        {
            for (e = 0 ; e <= 9; e++)
            {
                 for (s = 0; s <=  9; s++)
                 {
                    for (t = 1 ; t <= 9; t++)
                    {
                        for (b = 1; b <= 9; b++)
                        {
                                if (h != e && h != s && h != t && h != b &&
                                    e != s && e != t && e != b &&
                                    s != t && s != b &&
                                    t != b)
                                    
                            {
                                int hes = 100 * h + 10 * e + s;
                                int the = 100 * t + 10 * h + e;
                                int best = 1000* b + 100 * e + 10 * s + t;
                                int test = hes + the;
                                if (hes + the == best)
                              
                                System.out.println(best);
                          
                            }       

                                                                  
                      }
                    }
                }
            }
        }
    }
}


Ich denke das ist nun richtig so.

Was denkt ihr?



Du musst überprüfen, ob das Ergebnis mit der zusammengesetzen Zahl übereinstimmt, siehe Code:

Java:
public class ZahlenRaetsel
{
    public static void main(String args[])
    {
        int h,e,s,t,b;
        for (h = 1; h <= 9; h++ )
        {
            for (e = 0 ; e <= 9; e++)
            {
                for (s = 0; s <= 9; s++)
                {
                    for (t = 1 ; t <= 9; t++)
                    {
                        for (b = 1; b <= 9; b++)
                        {
                            if (h != e && h != s && h != t && h != b &&
                                    e != s && e != t && e != b &&
                                    s != t && s != b &&
                                    t != b)

                            {
                                int hes = 100 * h + 10 * e + s;
                                int the = 100 * t + 10 * h + e;
                                int best = 1000* b + 100 * e + 10 * s + t;
                                //Du musst überprüfen, ob das Ergebnis mit der       zusammengesetzen Zahl übereinstimmt
                                int test = hes + the;
                                if(best == test) {
                                    System.out.println(best);
                                }
                            }


                        }
                    }
                }
            }
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Was spricht denn gegen sowas:
Java:
        int b, e, h, s, t;
        for (b = 1; b < 10; b++) {
            for (e = 0; e < 10; e++) {
                for (h = 1; h < 10; h++) {
                    for (s = 0; s < 10; s++) {
                        for (t = 1; t < 10; t++) {
                            if (       b != e
                                    && b != h
                                    && b != s
                                    && b != t
                                    && e != h
                                    && e != s
                                    && e != t
                                    && h != s
                                    && h != t
                                    && s != t) {
                                int hes = h * 100 + e * 10 + s;
                                int the = t * 100 + h * 10 + e;
                                int best = b * 1000 + e * 100 + s * 10 + t;
                                if (hes + the == best) {
                                    System.out.println("hab 'ne Lösung:");
                                    System.out.println(" hes =  " + hes);
                                    System.out.println(" the =  " + the);
                                    System.out.println("best = " + best);
                                    System.out.println("b = " + b);
                                    System.out.println("e = " + e);
                                    System.out.println("h = " + h);
                                    System.out.println("s = " + s);
                                    System.out.println("t = " + t);
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }

Code:
hab 'ne Lösung:
 hes =  426
 the =  842
best = 1268
b = 1
e = 2
h = 4
s = 6
t = 8

Zumindest, wenn alle Variablen paarweise verschieden sind, gibt es genau 1 Lösung.

(Btw.: Über Reflection, ich habs versucht, bekommt man keine Informationen über lokale Variablen: http://stackoverflow.com/questions/...out-the-local-variables-using-java-reflection - ein gänzlich anderer Ansatz wäre ratsam.)
 
Entschuldige wenn ich das frage: was spielt das hier für eine Rolle ? 😉 Oder wolltest du einfach mal darüber reden ?

Das Spielt insofern eine Rolle, als dass ich sich das for-Geraffel hätte sparen können - als Semi-Professioneller sollte man das eigentlich wissen ... UND weil ich ja faul bin. 😀
 
Es macht zwar heutzutage nicht viel Sinn. Ich habe ausgerechnet, dass etwa die Hälfte der Kombinationen Doppelungen aufweist. Gibt es einen Algorithmus, nur gültige Zahlenkombinationen zu testen, also welche, in denen es keine gleichen Zahlen gibt(12345,12354,12435 usw.)?
 
Joa, den gibt es, hab ich mal in C geschrieben (weil ja ganz schnell sein muss), macht aber von der Geschwindigkeitsperformance keinen Unterschied.
Btw.:
12345,12354,12435 das sind Permutationen
123, 124, 125, 132 usw. das sind Combinations without repetition
Zuerst muss dir klar sein, was du möchtest/willst.
 
Hallo nochmal,

da ich noch am anfang bin und dieses reflection noch nicht durchgenommen habe, kann ich es auch in dem Fall nicht anwenden. Ich kann nur den gelernten Stoff anwenden 🙂
 
@AndiE: Bitte nochmal Stoff aus dem 1. Semester wiederholen, für deine Frage (Hint: Kombinatorik).

@vince191: Das wissen wir. Ich habe dir, nach deinen Vorgaben, eine Vorlage deinen Kenntnisstand adäquat geliefert.

@JStein52: Bist du mir jetzt Bös, weil ich Semi-Professioneller geschrieben habe??
 
Hi nochmal....

kann mir jmd noch einen kleinen Tipp geben wenn ich meinen code so umschreiben will, so dass er drarauf achteten das h und/oder t = 0 sind und mit diese ergebnisse anzeigen muss?
 

Zurück
Oben