Wie viele fünfstellige Zahlen können mit den Ziffern 2,4,5,6,9 geschrieben werden, die durch 11 teilbar sind ?
Könnte man dafür ein Programm schreiben? Wenn nicht wäre es toll, wenn ihr tortzdem die Antwort geben könntet.
Ja, könnte man.
Meine erste Idee dazu wäre, in einem Array alle kombinationen aufzustellen und das Array dann durchzugehen und jedes Mal wenn die Zahl durch 11 teilbar ist eine Variable hochzuzählen. Machbar ist das ganze auf jeden Fall.
Patentlösung hab ich dazu momentan keine, ist eine interessante Aufgabe.
Frage dazu: Muss in jeder Kombination jede Zahl einmal vorkommen, oder heißt es lediglich das keine anderen Zahlen vorkommen dürfen?
wäre auch meine frage, sonst hätte ich schon ne idee...
Also ich hab das mal mit PHP ausrechnen lassen.
Wenn sich die Zahlen wiederholen dürfen, dann gibt es 270 Stück, die sich durch 11 teilen lassen. Nämlich folgende:
Spoiler:(zum lesen bitte Text markieren)22242, 22264, 22429, 22462, 22495, 22594, 22649, 22924, 22946, 24222, 24244, 24255, 24266, 24299, 24442, 24464, 24552, 24596, 24629, 24662, 24695, 24926, 24959, 24992, 25245, 25256, 25454, 25465, 25542, 25564, 25652, 25696, 25949, 26224, 26246, 26422, 26444, 26455, 26466, 26499, 26554, 26565, 26642, 26664, 26994, 29249, 29425, 29469, 29524, 29546, 29645, 29656, 29942, 29964, 42229, 42262, 42295, 42449, 42526, 42559, 42592, 42625, 42669, 42922, 42944, 42955, 42966, 42999, 44242, 44264, 44429, 44462, 44495, 44594, 44649, 44924, 44946, 45254, 45265, 45452, 45496, 45529, 45562, 45595, 45694, 45925, 45969, 46222, 46244, 46255, 46266, 46299, 46442, 46464, 46552, 46596, 46629, 46662, 46695, 46926, 46959, 46992, 49225, 49269, 49445, 49456, 49522, 49544, 49555, 49566, 49599, 49654, 49665, 49929, 49962, 49995, 52294, 52426, 52459, 52492, 52525, 52569, 52624, 52646, 52954, 52965, 54252, 54296, 54494, 54549, 54626, 54659, 54692, 54945, 54956, 55242, 55264, 55429, 55462, 55495, 55594, 55649, 55924, 55946, 56254, 56265, 56452, 56496, 56529, 56562, 56595, 56694, 56925, 56969, 59224, 59246, 59422, 59444, 59455, 59466, 59499, 59554, 59565, 59642, 59664, 59994, 62249, 62425, 62469, 62524, 62546, 62645, 62656, 62942, 62964, 64229, 64262, 64295, 64449, 64526, 64559, 64592, 64625, 64669, 64922, 64944, 64955, 64966, 64999, 65252, 65296, 65494, 65549, 65626, 65659, 65692, 65945, 65956, 66242, 66264, 66429, 66462, 66495, 66594, 66649, 66924, 66946, 69245, 69256, 69454, 69465, 69542, 69564, 69652, 69696, 69949, 92224, 92246, 92422, 92444, 92455, 92466, 92499, 92554, 92565, 92642, 92664, 92994, 94226, 94259, 94292, 94424, 94446, 94545, 94556, 94622, 94644, 94655, 94666, 94699, 94952, 94996, 95249, 95425, 95469, 95524, 95546, 95645, 95656, 95942, 95964, 96294, 96426, 96459, 96492, 96525, 96569, 96624, 96646, 96954, 96965, 99242, 99264, 99429, 99462, 99495, 99594, 99649, 99924, 99946
Quelltext:
Wenn sich die Zahlen nicht wiederholen dürfen, dann gibt es 12 Stück, die sich durch 11 teilen lassen. Nämlich folgende:Code:<?php $numbers = array(2, 4, 5, 6, 9); function getNumberOfFactors($factor, $curNum = 0, $iteration = 0){ global $numbers; $factors = 0; $iteration++; for($i = 0, $max = count($numbers); $i < $max; $i++){ $number = $curNum*10 + $numbers[$i]; if($iteration == $max){ if($number%$factor == 0){ $factors++; } } else { $factors += getNumberOfFactors($factor, $number, $iteration); } } return $factors; } echo getNumberOfFactors(11);
Spoiler:(zum lesen bitte Text markieren)24596, 24695, 29546, 29645, 54296, 54692, 59246, 59642, 64295, 64592, 69245, 69542
Die Modifikationen am Quelltext sind nur geringfügig:
Natürlich alles unter dem Vorbehalt, dass das Script auch alle möglichen Zahlen korrekt berechnet…Code:<?php $numbers = array(2, 4, 5, 6, 9); function getNumberOfFactors($factor, $numbers, $curNum = 0){ $factors = 0; for($i = 0, $max = count($numbers); $i < $max; $i++){ $number = $curNum*10 + $numbers[$i]; if($max == 1){ if($number%$factor == 0){ $factors++; } } else { $factors += getNumberOfFactors($factor, array_merge(array_slice($numbers, 0, $i), array_slice($numbers, $i+1)), $number); } } return $factors; } echo getNumberOfFactors(11, $numbers);
Ich mach das hier mal zu, da es das ganze hier auch nochmal gibt ist das etwas arg redundant.
Um das ganze festzuhalten: Hier hats eine schöne Lösung vom Krümelmonster in PHP für beide möglichen Fälle, im Thread in der Plauderecke hats das ganze in Java und JavaScript.