Zinhani 0 Denunciar post Postado Julho 11, 2010 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>'; Será que o php aguenta? 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 Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Ribeiro 4 Denunciar post Postado Julho 11, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Julho 11, 2010 Eu fiz uma função"zinha" para um problema similar outro dia, tá postada no blog do Davi Ferreira Compartilhar este post Link para o post Compartilhar em outros sites
Zinhani 0 Denunciar post Postado Julho 11, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Ribeiro 4 Denunciar post Postado Julho 11, 2010 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); Compartilhar este post Link para o post Compartilhar em outros sites
Zinhani 0 Denunciar post Postado Julho 11, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Ribeiro 4 Denunciar post Postado Julho 11, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 11, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites