Das hat mir jetzt doch noch keine Ruhe gelassen, ob es wirklich nur eine Loesung gibt, und ob die Angabe der verschiedenen Einzelsummen (a+b+c+d+e=15, 21, 26, 29) notwendig ist.

Ein brute-force Algorithmus (siehe attachment), wenn ich mich nicht verprogrammiert habe, findet nur eine Loesung und erstaunlicherweise gibt es auch nur 27216 Kombinationen.

Wie errechnet sich die Anzahl Kombinationen:

a darf nicht Null, sein also haben wir 9 Moeglichkeiten.
b darf Null, aber nicht a sein, also wieder 9 Moeglichkeiten.
Dann geht es mit der Permutationenformel ganz normal weiter, also:

9 * 9 * 8 * 7 * 6 = 27216   q.e.d.


Jetzt kann ich wieder ruhig schlafen ;)

A.
// -*- tab-width:4; c-basic-offset:4; indent-tabs-mode: nil; -*-

#include <iostream>
using namespace std;

//   abcde
// +  bcde
// +   cde
// +    de
// +     e
// -------
//   aaaaa

int main( int argc, char** argv )
{
        int versuche = 0;

        for ( int a = 1; a <= 9; a++ )
        {
                int sollwert = a * 10000 + a * 1000 + a * 100 + a * 10 + a;

                for ( int b = 0; b <= 9; b++ )
                {
                        if ( b == a ) continue;
                        for ( int c = 0; c <= 9; c++ )
                        {
                                if ( c == b || c == a ) continue;
                                for ( int d = 0; d <= 9; d++ )
                                {
                                        if ( d == c || d == b || d == a) 
continue;
                                        for ( int e = 0; e <= 9; e++ )
                                        {
                                                if ( e == d || e == c || e == b 
|| e == a ) continue;

                                                int summe = 
                                                        a * 10000 + b * 1000 + 
c * 100 + d * 10 + e +
                                                        b * 1000 + c * 100 + d 
* 10 + e +
                                                        c * 100 + d * 10 + e +
                                                        d * 10 + e +
                                                        e;

                                                versuche++;

                                                if ( summe == sollwert )
                                                        cout << sollwert
                                                                 << " a=" << a
                                                                 << " b=" << b
                                                                 << " c=" << c
                                                                 << " d=" << d
                                                                 << " e=" << e
                                                                 << endl;
                                        }
                                }
                        }
                }
        }
        cout << "Versuche: " << versuche << endl;
}
_______________________________________________
Niederbayern mailing list
[email protected]
http://lists.openstreetmap.de/mailman/listinfo/niederbayern

Antwort per Email an