PHP - Ayuda con secuencias numéricas

 
Vista:

Ayuda con secuencias numéricas

Publicado por jordi (1 intervención) el 13/12/2009 20:42:34
Hola

Estoy haciendo un programa y la verdad es que estoy bastante atascado. Lo que tengo que hacer es lo siguient: para determinar la n-ésima forma de ordenar unas sumas parciales
para hacer una suma fija. Debo recibir un entero s (1 ≤ s ≤ 32) y otro n (1 ≤ n < 231) y mostrar la n-ésima forma de ordenar la suma de digitos que lo forman, en orden ascendente.

Por si no queda claro, pongo un ejemplo: Si queremos obtener 4 como valor de la suma, tenemos 8 maneras diferentes de conseguirlo (siempre en orden)

1 1 1 1
1 1 2
1 2 1
1 3
2 1 1
2 2
3 1
4

Pero como queremos quedarnos por ejemplo con la 4ª forma de conseguirlo, el programa tan sólo debe mostrar: 1 3

Tengo el siguiente código, pero no consigo que funcione correctamente:

$contador=0;
function sec($suma, $suma_temp, $secuencia, $aparicion, $cifra) {
while ($cifra>=1 && $cifra<=9):
$secuencia=($secuencia*10)+$cifra;
$suma_temp=$suma_temp+$cifra;
if ($suma_temp<$suma) {
sec($suma,$suma_temp,$secuencia,$aparicion,$cifra);
}
elseif ($suma_temp>$suma) {
#echo "Me he pasao<br>".$secuencia."<br>";
return 0;
}
elseif ($suma_temp=$suma) {
$GLOBALS['contador'] = $GLOBALS['contador']+1;
#echo $GLOBALS['contador'];
if ($GLOBALS['contador']==$aparicion) { #echo "Esta es!";
echo "Encontrada la ".$aparicion." secuencia: '".$secuencia."' que suma ".$suma."<br>";
}
return 0;
}
$cifra++;
endwhile;
}
for ($i = 1; $i <= 9; $i++) {sec(5,0,0,3,$i); }

Alguien ve el fallo?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder