Unbestimmte Anzahl von Ziffern Addieren -> Alle möglichen Kombinationen?!

Hey,

ich hab keine Ahnung wie ich das machen soll/kann: Ich habe ein unbegrenzte Anzahl von Ziffern. Ich möchte dabei Systematisch alle möglichen Additions-Versuche machen.

Bsp:

Ich habe 3 versch. Zahlen:

1
3
4

Es soll folgendes probiert werden:

1+3+4=
1+3=
1+4=
3+4=
...

bis man alles ausprobiert hat.


___

Hat jemand eine Ahnung**** Probier jetzt schon seit genau 5 1/2 h auf einem Block, aber ich bin einfach nur fasziniert / ratlos / deprimiert / sauer bzw. genervt.

Kann mir das jmd. zusammenbasteln**** ~ Soory für die doofe Anmache, aber ich kann wirklich nicht mehr :-(

Noch eine Zahl und der Bildschirm ist an der Wand:rolleyes:
 
Was du suchst ist die Potenzmenge deiner Eingangsmenge an Zahlen (Wobei Menge falsch ist, es dürfen ja auch doppelte enthalten sein).

Ich hab auch eine Beispielimplementierung dafür in PHP gefunden, aber es will einfach nicht^^. Ich kann PHP nicht ausstehen und es mich nicht. Wenn du willst, mache ich schnell eine JavaScript Implementierung.
 
Hau her ;)

Vielen Dank... die php-Lösung wäre am besten, kannst ja einfach mal posten...

(ich möchte nämlich die Potzenmenge in einer cloud berechnen lassen und da ist javascript unpassend)

evtl. kann man ja das JS noch "verwerten" ;-)


Gruß

PS: Danke, Danke, Danke******
 
Hau her ;)

Vielen Dank... die php-Lösung wäre am besten, kannst ja einfach mal posten...

http://www.janitor61.com/?p=17

Die Summenbildung ist ja dann nur noch das durchlaufen der Arrays.

(ich möchte nämlich die Potzenmenge in einer cloud berechnen lassen und da ist javascript unpassend)

Sag das nicht.
http://nodejs.org/
http://www.nodejscloud.com/

(Nur beispielshaft. NodeJS ist schon sehr speziell, es gibt auch anderen JavaScript Serversysteme)

Und ich könnte Wetten V8 schlägt den PHP Interpreter ;)


Mit meiner JS Lösung komme ich gerade nicht wirklich weiter. Ich wollte eigentlich mit Bitoperationen arbeiten, weil die Permutation sind ja einfach alle einsen, wenn man binär hochzählt. Beispiel

Array = [1,2,3]

Potenzmenge:
000 : []
001 : [3]
010 : [2]
011 : [2,3]
100 : [1]
101 : [1,3]
110 : [1,2]
111 : [1,2,3]

Aber funktionieren tut es bisher nicht. Naja, ich hoffe die PHP Lösung funktioniert für dich.
 
ähm. also die Eingabe der Daten ist klar, aber die Ausgabe nicht?!

PHP:
$in = array(1,2,3);
function powerSet($in,$minimumNumber = 1) {
   $count = count($in);
   $members = pow(2,$count);
   $return = array();
   for ($i = 0; $i < $members; $i++) {
      $b = sprintf("%0".$count."b",$i);
      $out = array();
      for ($j = 0; $j < $count; $j++) {
         if ($b{$j} == '1') $out[] = $in[$j];
      }
      if (count($out) >= $minimumNumber) {
         $return[] = $out;
      }
   }
   return $return;
}

EDIT:

Vorher( vor dem Thread), hab ich mit folgendem Schlamassel rumgespielt:

PHP:
$in = "1,2,3,4,5";
//Zerstückeln in Happen ;-)
$pieces = explode(",", $in);
$max_anzahl = substr_count($in,',');

$count = 0; //zählt die aktuelle Möglichkeit
$count2 = 0; //zählt die vorrangegangen $pieces

$array_spiel = $pieces[0];

while($count = (pow(2, $max_anzahl))) //Mach das solange bis die Maximalen Möglichkeiten ausgeschöpft sind :)
{
$array_spiel = $array_spiel + $array_spiel[$count2];
echo $array_spiel;
$count2++;
}

WARNUNG: NICHT AUSFÜHREN --> Endlosschleife^^
 
Im Kommentar über der Funktion steht doch, wie die Ausgabe aussieht. Und zwar ein zweidimensionales Array. Also ein Array von Arrays. Und von jedem dieser Arrays kannst du jetzt die Summe berechnen.

Hab die Funktion nochmal kopiert und jetzt tut mein code...

PHP:
function powerSet($in,$minimumNumber = 1) {
	$count = count($in);
	$members = pow(2,$count);
	$return = array();
	for ($i = 0; $i < $members; $i++) {
		$b = sprintf("%0".$count."b",$i);
		$out = array();
		for ($j = 0; $j < $count; $j++) {
			if ($b{$j} == '1') $out[] = $in[$j];
		}
		if (count($out) >= $minimumNumber) {
			$return[] = $out;
		}
	}
	return $return;
}


$zahlen = array(6,5,4,3);
$potenzmenge = powerSet($zahlen);

/*
	Ausgabe der Summen
*/
for($i = 0; $i < count($potenzmenge); $i++) {
	$summe = 0;

	for($k = 0; $k < count($potenzmenge[$i]); $k++) {
		$summe += $potenzmenge[$i][$k];
	
		echo $potenzmenge[$i][$k];
	
		if($k < count($potenzmenge[$i]) - 1)
			echo ' + ';
	}

	echo ' = ';
	echo $summe;
	echo '<br>';
}

Ausgabe

3 = 3
4 = 4
4 + 3 = 7
5 = 5
5 + 3 = 8
5 + 4 = 9
5 + 4 + 3 = 12
6 = 6
6 + 3 = 9
6 + 4 = 10
6 + 4 + 3 = 13
6 + 5 = 11
6 + 5 + 3 = 14
6 + 5 + 4 = 15
6 + 5 + 4 + 3 = 18
 

Neue Beiträge

Zurück