DouglasP 1 Denunciar post Postado Dezembro 15, 2009 Bom dia, fiz esse código que ele pega e gera numeros aleatorios de uma array e soma os numeros ate somar x, aconteçe que ele usa numeros repetidos, e preciso que não repita os numeros. alguem poderia dar uma ajuda? código: <? $achar = 15; $numeros = array(1, 2, 3, 4, 5); $quant = sizeof($numeros); function gera() { $v = 5; $i = 0; $soma = 0; global $numeros; global $quant; global $sorteados; global $soma; global $achar; global $a; while ($i < $v) { $randomizar = $numeros[rand(0,$quant -1)]; $a[$i] = $randomizar; $i++; $sorteados .= "$randomizar"; $soma = array_sum($a); } } while ($soma <> $achar) { unset($sorteados); unset($soma); unset($i); unset($v); gera(); } $x = 1; $y = 5; $z = 0; echo "Numeros sorteados: $sorteados"; echo "<br />"; echo "Soma: $soma"; echo "<br />"; echo "<br />"; while ($x <= $y) { echo "$x -> $a[$z]"; echo "<br />"; $x++; $z++; } ?> Grato. Compartilhar este post Link para o post Compartilhar em outros sites
Lesfar Inmors 0 Denunciar post Postado Dezembro 15, 2009 <?php /* * numeros Array, são os números que você quer usar para a soma. * repeticoes Int, quantas vezes você quer fazer a soma dos números. */ function gera($numeros, $repeticoes) { //Os números que já participaram da soma $somados = array(); //Valor total da soma $soma = 0; //Como não pode repetir, se a quantidade de números for menor do que a quantidade de vezes que deve somar, retorna um erro. if (count($numeros) < $repeticoes) { throw new Exception('Quantidade de números (' . count($numeros) . ') é menor do que a quantidade de repetições (' . $repeticoes . ')'); } //Faz o array se tornar randomizado para não precisarmos fazer vários loops shuffle($numeros); //Simplesmente faz a soma até a quantidade de repetições. for ($i = 0; $i < $repeticoes; $i++) { $soma += $numeros[$i] } //Retorna o valor da soma return $soma; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Dezembro 15, 2009 No caso "$numeros", como eu separo eles? pois no meu caso são varios numeros, e tem uma soma final que é a que precisa dar. preciso apenas que não repita. Compartilhar este post Link para o post Compartilhar em outros sites
Lesfar Inmors 0 Denunciar post Postado Dezembro 15, 2009 No caso "$numeros", como eu separo eles? pois no meu caso são varios numeros, e tem uma soma final que é a que precisa dar. preciso apenas que não repita. Deixa eu entender. Você tem vários números e precisa somá-los até que cheguem o mais perto possível de um resultado que você especificou e no final quer que retorne esses números? Ou precisa simplesmente da soma de todos os números e tmb deles aleatórios? Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Dezembro 15, 2009 oque preciso é oque meu codigo faz, preciso apenas limitar para que ele não use o mesmo numero mais de uma vez. oque eu quero é que ele pegue randomicamente os numerros de uma array e some, ate dar um x resultado, e depois que mostre quais numeros foram usados. Compartilhar este post Link para o post Compartilhar em outros sites
Lesfar Inmors 0 Denunciar post Postado Dezembro 15, 2009 oque preciso é oque meu codigo faz, preciso apenas limitar para que ele não use o mesmo numero mais de uma vez. oque eu quero é que ele pegue randomicamente os numerros de uma array e some, ate dar um x resultado, e depois que mostre quais numeros foram usados. Então faça um shuffle($numeros) e pegue na sequencia até dar o que você quer e vai guardando os números usados em outro array. Compartilhar este post Link para o post Compartilhar em outros sites
Skyo 1 Denunciar post Postado Dezembro 15, 2009 Faz como ele disse, coloca os já utilizados num outro array e na hora da soma usa o in_array... if(!in_array($numeros[$i], $usados)) { $soma += $numeros[$i]; $usados[] = $numeros[$i]; } Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Dezembro 16, 2009 tentei usar como você amigo, porem não consegui, sou novato em arrays e portanto não entendo muito bem como usar. Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Dezembro 16, 2009 consegui, quem quiser: <? $achar = 15; $numeros = array(1, 2, 3, 4, 5); $quant = sizeof($numeros); function gera() { $v = 5; $i = 0; $soma = 0; global $numeros; global $quant; global $sorteados; global $soma; global $achar; global $a; while ($i < $v) { $randomizar = $numeros[rand(0,$quant -1)]; $a[$i] = $randomizar; $i++; $sorteados .= "$randomizar"; $soma = array_sum($a); } } while ($soma <> $achar) { unset($sorteados); unset($soma); unset($i); unset($v); gera(); $novo_array = array_unique($a); $soman = array_sum($novo_array); while ($soman <> $achar) { unset($sorteados); unset($soma); unset($i); unset($v); gera(); $novo_array = array_unique($a); $soman = array_sum($novo_array); } } $x = 1; $y = 5; $z = 0; echo "Numeros sorteados: $sorteados"; echo "<br />"; echo "Soma: $soma"; echo "<br />"; echo "<br />"; while ($x <= $y) { echo "n -> $a[$z]"; echo "<br />"; $x++; $z++; } ?> Compartilhar este post Link para o post Compartilhar em outros sites