permutaciones? variaciones?

NeB1

me estoy rallando para hacer un programa, imaginemos que tengo 3 palabras:

"hola soy yo"

y quiero sacar todas las posibles combinaciones:

hola soy yo
hola yo soy
soy hola yo
soy yo hola
yo hola soy
yo soy hola

hola soy
hola yo
soy hola
soy yo
yo hola
yo soy

hola
yo
soy

que formula matemática es la que saca esto?? es q me estoy rallando muchísimo.

EDIT: Me acabo de iluminar

C3,3 * C3,2 * C3,1

B

Calcula el factorial del numero de palabras.

Nada, pense que querias calcular el total de permutaciones :P

NeB1

#2 factorial de 3->6, si te das cuenta en el ejemplo que he puesto salen 15

ejejjeje ezo

Dod-Evers

#1 acaba de encender el flexo.

LOc0

Efectivamente una cosa es calcular el número de permutaciones y otra generarlas. Para lo segundo -> http://www.bearcave.com/random_hacks/permute.C

Ten en cuenta que eso te va permutando un array de enteros tipo {1, 2, 3}

Cuando tengas una permutación, como por ejemplo {1, 3, 2}, te vas a tu array de cadenas y haces un print(cadenas[per[0]], cadenas[per[1]], cadenas[per[2]])

cadenas={teta, culo, pis}

Entonces saldría:

teta pis culo

Para las permutaciones de 3 elementos tomados de 2 en 2, te generas las de 3, pero quitas las que tengan un elemento determinado. Y las de uno en uno pues es trivial...

Salu2 ;)

NeB1

na, lo he hecho en php, y me ha quedado algo así:

<?php
set_time_limit(500);
function combinaciones( $arrayExplode, $itemsRestantes, $arrayUsados, $indice, &$resultados ){
  if(count($itemsRestantes)>0)
  for($i=count($itemsRestantes)-1;$i>=0;$i--){
    $k=0;
	$arrayUsados[$indice]=$itemsRestantes[$i];
	foreach($itemsRestantes as $clave=>$valor){
	  if($clave!==$i){
	    $aux2[$k]=$valor;
	    $k++;
	  }
	}
	if(count($aux2)>0){
	  combinaciones( $arrayExplode, $aux2, $arrayUsados, $indice+1, $resultados);
      array_unique($arrayUsados);
      $cadena="";
	  $imprimido=1;
	  foreach($arrayUsados as $clave=>$valor){
	    $cadena.=$valor." ";
	  }
	  $resultados[]=$cadena;
	}
  }
  array_unique($arrayUsados);
  if($imprimido!=1){
    $cadena="";
    foreach($arrayUsados as $clave=>$valor){
	  $cadena.=$valor." ";
    }
    $resultados[]=$cadena;
  }
  return 0;
  
} $cadena="1 2 3 4 5 6 7 8"; $array_explode=explode(" ",$cadena); $array_usados=array(); $resultados=array(); $quitados=array(); $time1=microtime(); /*PRE: Els dos primers parámetros son el propi array de la frase despues de fer el explode, el tercer parámetro es un array buit, el 4º parámetro sempre val 0, y el últim es un array buit que será on es guardarán els resultats*/ combinaciones( $array_explode, $array_explode, $array_usados, 0, $resultados); $time2=microtime(); $time=$time2-$time1; foreach($resultados as $clave=>$valor){ echo "[ ".$valor." ]<br>"; } echo "Tiene ".count($resultados)." combinaciones";

Usuarios habituales