Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DouglasP

[Resolvido] código

Recommended Posts

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

<?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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.