[OSM-Niederbayern] Matheraetsel abcde Summe

Alexander Lehner lehner at edv-buero-lehner.de
Di Mär 12 20:12:05 CET 2013


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.
-------------- nächster Teil --------------
// -*- 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;
}