Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Estava fazendo um script para resolver um problema pessoal quando por curiosidade resolvi brincar um pouco com ele.
tentei simular os 50.063.860 Milhões de resultados da mega sena mas o script simplesmente não é executado.
Como não fazia menor ideia de como fazer analise combinatória, adaptei um exemplo que peguei no phpbrasil do Marcos Regis,
funcionou perfeitamente, mas quando adaptei para simular o jogos da mega deu problema
Script:
// Array com os 60 numeros da mega sena
$numeros = array('1','2','3','4','5','6','7','8','9','10',
'11','12','13','14','15','16','17','18','19','20',
'21','22','23','24','25','26','27','28','29','30',
'31','32','33','34','35','36','37','38','39','40',
'41','42','43','44','45','46','47','48','49','50',
'51','52','53','54','55','56','57','58','59','60');
// Array que vai receber os resultados
$jogos=array();
// variavel para os 6 numeros jogados
$n1 = $n2 = $n3 = $n4 = $n5 = $n6 = '';
// calculo
foreach($numeros as $a1=>$n1){
for($a2 = $a1 + 1; $a2 < count($numeros); $a2++){
$n2 = $numeros[$a2];
for($a3 = $a2 + 1; $a3<count($numeros); $a3++){
$n3=$numeros[$a3];
for($a4 = $a3 + 1; $a4<count($numeros); $a4++){
$n4 = $numeros[$a4];
for($a5 = $a4 + 1; $a5<count($numeros); $a5++){
$n5 = $numeros[$a5];
for($a6 = $a5 + 1; $a6<count($numeros); $a6++){
$n6 = $numeros[$a6];
$jogos[] = array($n1,$n2,$n3,$n4,$n5,$n6);
}
}
}
}
}
}
echo "Criada " . count($jogos) . " combinacoes. Exibindo: = ";
// echo '<pre>';
print_r($jogos);
// echo '</pre>';por curiosidade tentei fazer isso:
for ($i = 1; $i <= 1000000; $i++) {
echo $i.'<br>';
}
E demora uma eternidade para concluir.
Então eu pergunto: como fazer no php um calculo dessa proporção?
Vlw
Eu fiz uma função"zinha" para um problema similar outro dia, tá postada no blog do Davi Ferreira
>
Seu cálculo deve estar errado.
É evidente que, por ser uma linguagem poderosíssima, o PHP aguenta fazer isso:
for ($i = 1; $i <= 1000000; $i++) {
}
Agora, fazer isso:
for ($i = 1; $i <= 1000000; $i++) {
echo $i.'<br>';
}
Quem não aguenta é o browser.
OK refaço a pergunta então
Sabendo que calcular o php calcula
Como fazer com que o php mostre isso no browser?
É claro que estou me referindo ao exemplo da mega sena e não do 2º ex do for.
A maneira mais simples e rápida (e mais leve para o browser) é mostrar o resultado do array em uma tag pré-formatada, como o <pre>:
echo '<pre>';
print_r($array);>
A maneira mais simples e rápida (e mais leve para o browser) é mostrar o resultado do array em uma tag pré-formatada, como o <pre>:
echo '<pre>';
print_r($array);
Já esta no meu exemplo, o problema é que o php não executa e nem me informa o erro.
OBS: Também vou dar uma olhada.
Veja só, debugando rapidamente o que eu posso ver:
// calculo
foreach($numeros as $a1=>$n1) {
for($a2 = $a1 + 1; $a2 < count($numeros); $a2++) {
$n2 = $numeros[$a2];
for($a3 = $a2 + 1; $a3<count($numeros); $a3++) {
$n3=$numeros[$a3];
for($a4 = $a3 + 1; $a4<count($numeros); $a4++) {
$n4 = $numeros[$a4];
for($a5 = $a4 + 1; $a5<count($numeros); $a5++) {
$n5 = $numeros[$a5];
for($a6 = $a5 + 1; $a6<count($numeros); $a6++) {
$n6 = $numeros[$a6];
$jogos[] = array($n1,$n2,$n3,$n4,$n5,$n6);
break;
}
break;
}
break;
}
break;
}
}
}
Você deve encontrar uma solução para não atingir o limite máximo de alocamento de memória.
COM CERTEZA tem um jeito mais simples de fazer isso.
Dê uma olhada na função que o João fez, postada acima, e pense em como adaptá-la para resolver o seu problema.
OBS: É evidente que eu não vou resolver o problema pra você, afinal dessa maneira você não vai aprender a resolvê-lo e, mais importante ainda, não vai saber onde está o erro.
Rode o código que eu postei e veja o resultado.
Uma possível solução em java.
class Combinacoes{
private int numeros[] = {1,2,3,4,5,6,7,8,9,10};
private int quantidade = 3;
private int resultado[] = new int[3];
private int count = 0;
private void busca(int inicio,int fim, int profundidade){
if ( (profundidade + 1) >= quantidade)
for(int x = inicio; x <= fim; x++){
resultado[profundidade] = numeros[x];
// faz alguma coisa com um dos resultados possiveis
count++;
System.out.println(resultado[0] + ", " + resultado[1] + ", " + resultado[2] + "\n");
}
else
for(int x = inicio; x <= fim; x++){
resultado[profundidade] = numeros[x];
busca(x + 1,fim + 1,profundidade + 1);
}
}
public static void main(String args[]){
Combinacoes comb = new Combinacoes();
comb.busca(0, (10-3), 0);
System.out.println("Total de combinacoes: " + comb.count);
}
}
Adapta para php e depois posta aí pra nós.
Seu cálculo deve estar errado.
É evidente que, por ser uma linguagem poderosíssima, o PHP aguenta fazer isso:
Agora, fazer isso:Quem não aguenta é o browser.