Ziffer in Zahl nicht doppelt

Atalión

Mitglied
Hallo ihr Lieben,

mein Bruder hat mir 'ne Aufgabe gestellt, und zwar: Man soll zwei Zahlen dividieren und als Ergebnis soll 7 rauskommen. Insgesamt müssen die zwei Zahlen alle Ziffern von 0-9 enthalten, diese Ziffern dürfen aber auch nur einmal vorkommen.

Ich hab die Funktion jetzt schon soweit, dass ich alle Rechnungen angezeigt bekomme, bei denen 7 das Ergebnis ist.

Mein Problem ist jetzt, dass da natürlich auch viele Ziffern doppelt vorkommen. Wie schaffe ich es jetzt, dass jede Ziffer in beiden Zahlen wirklich nur einmal vorkommt?

Als Beispiel: 67890 / 12345 wäre okay, weil jede Ziffer von 0-9 nur einmal vorkommt in der gesamten Rechnung. 67876 / 12321 ginge nicht, weil die Ziffern 1, 2, 7 und 6 doppelt vorkommen.

Ich kann mir kaum vorstellen, dass es da eine direkte Funktion von PHP für gibt, oder? Allerdings ist es auch schwierig, selbst eine komplexe Funktion zu schreiben, weil bei so großen Zahlen mein PC schlapp macht xD :rolleyes:

Hoffe, ihr könnt mir helfen :)

Liebe Grüße,
Malte
 
Zuletzt bearbeitet:
Schau mal ob dir das hier hilft:

PHP:
<?php
$zahl1 = str_split("67890");
$zahl2 = str_split("12345");

$array = array_merge($zahl1, $zahl2);

$bereinigt = array_unique($array);

if (count($array) != count($bereinigt)) {
echo "Es gibt doppelte Zahlen";
} else {
	echo "Es gibt keine doppelte Zahlen";
}
?>
 
Huhu

Ja super, hat mir geholfen. Hab sogar tatsächlich eine Lösung erhalten.

Allerdings kann ich mir nicht vorstellen, dass es da nur eine einzige Lösung gibt. Denn von den zig tausend Möglichkeiten, wo 7 das Ergebnis ist (und die Ziffern entsprechend doppelt), war jetzt diese Lösung, wo alle Ziffern unterschiedlich sind, gleich die 34. in der Reihenfolge von den Ergebnissen, wo 7 rauskommt. Das halte ich für unwahrscheinlich..

Ich glaub da reicht PHP dann nicht mehr aus.. sobald ich Zahlen größer als sechsstellig benutze, macht der Server Probleme xD

aber egal, ich hab zumindest eine Lösung :)

Danke ^^
 
Allerdings kann ich mir nicht vorstellen, dass es da nur eine einzige Lösung gibt.
Gibt es auch nicht:
Code:
37926 : 05418
18459 : 02637
31689 : 04527
41832 : 05976
98532 : 14076
16758 : 02394
36918 : 05274
53298 : 07614

Falls du nicht wissen willst wie ich es angegangen bin solltest du nicht weiter lesen.

PHP:
function permute($items, $perms = array()) {
    static $permuted_array;
    if (empty($items)) {
		if($perms[5] <= 1){
			if(isSeven($perms)){
				$permuted_array[] = $perms;
			}
		}
    } else {
        for ($i = count($items) - 1; $i >= 0; --$i) {
            $newitems = $items;
            $newperms = $perms;
            list($foo) = array_splice($newitems, $i, 1);
            array_unshift($newperms, $foo);
            permute($newitems, $newperms);
        }
        return $permuted_array;
    }
}

function isSeven($arr){
	$first = implode('',array_slice($arr,0,5));
	$second = implode('',array_slice($arr,5));
	
	if(($first/$second) == 7){
		return true;
	}
	return false;
}
 

$result = permute(array(0,1,2,3,4,5,6,7,8,9));
foreach($result as $arr){
	echo implode('',array_slice($arr,0,5)) . ' : ' . implode('',array_slice($arr,5)) . '<br>';
}
 
Ah cool. Danke für die Antwort. Dann war 98532 : 14076 tatsächlich die einzige Lösung, wo keine 0 vorne stand. 98532 : 14076 war nämlich auch mein Ergebnis..

Dein Script war übrigens wesentlich schneller als meins.

Das sind jetzt ja alles 5-stellige Zahlen.. wäre interessant, ob das auch mit größeren Dividenden und entsprechend kleineren Divisoren geht. Aber da hab ich heute Abend keinen Nerv mehr für xD

Danke nochmal,
Malte
 
Zurück