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