Jump to content

Joelsonc3

Membro Inativo
  • Posts

    7
  • Joined

  • Last visited

Posts posted by Joelsonc3

  1. Em 28/10/2023 em 21:29, Marc____ disse:

    Vc há 15 anos e eu agora, tb querendo muito entender essa lógica matemática. Não entendi o suficiente para fazer do seu jeito. No entanto, para testar, eu já estava fazendo assim no Excel: gero todas C7,5 = 21 e todas as C7,4 = 35. Cada linha de C,7,5 é comparada com todas as linhas de C7,4 e contados os acertos de 3 e 4. Após, aleatoriamente, uma a uma, vou deletando cada linha de C7,5 que não altere o total de linhas de C7,4 (35) com pelo menos uma com 3. Até o momento só tem reduzido para 4. Quando faço de acordo com o resultado, eliminando todas as demais, dá tudo certo. Não sei, mas talvez exista uma sequência certa para eliminação e que eu não estou enxergando. Mas bateu na trave. 

     

    Em 25/07/2008 em 01:20, nathanael sampaio disse:

    VAMOS TER COMO EXEMPLO ESSA MATRIZ: (7_5_4_5) = 3

    PRIMEIRO PASSO:

    FAÇA TODAS AS COMBINAÇÕES 4 A 4 PARA FECHAR, FICA ASSIM:

    1-2-3-4

    1-2-3-5

    1-2-3-6

    1-2-3-7

    1-2-4-5

    1-2-4-6

    1-2-4-7

    1-2-5-6

    1-2-5-7

    1-2-6-7

    1-3-4-5

    1-3-4-6

    1-3-4-7

    1-3-5-6

    1-3-5-7

    1-3-6-7

    1-4-5-6

    1-4-5-7

    1-4-6-7

    1-5-6-7

    2-3-4-5

    2-3-4-6

    2-3-4-7

    2-3-5-6

    2-3-5-7

    2-3-6-7

    2-4-5-6

    2-4-5-7

    2-4-6-7

    2-5-6-7

    3-4-5-6

    3-4-5-7

    3-4-6-7

    3-5-6-7

    4-5-6-7.

    SEGUNDO PASSO:

    FORME GRUPOS DE 5 NUMEROS QUE ACOLHAM TODAS AS COMBINAÇÕES DE 4 NUMEROS ASSIM:

    (+) 1-2-3-4-5 =====>EX:(1-2-3-4) - (1-2-3-5) - (1-2-4-5) - (1-3-4-5) - (2-3-4-5).

    (Z)1-2-3-6-7

    (*)(1-2-4-6-7

    (*;Z)1-2-5-6-7

    (*;Z)1-3-4-6-7

    (Z)1-3-5-6-7

    (Z)1-4-5-6-7

    (+;*)2-3-4-5-6

    (+;*)2-3-4-5-7

    (*)2-4-5-6-7=====>EX:(2-4-5-6) - (2-4-5-7) - (2-4-6-7) - (2-5-6-7) - (4-5-6-7).

    TERCEIRO PASSO:

    FORME GRUPOS DE 5 NUMEROS QUE ACOLHAM PELO MENOS 4 NUMEROS DAS COMBINAÇÕES DE 5 NUMEROS ASSIM:

    EX01:

    1-2-3-4-5=====>(+)

    1-3-5-6-7=====>(Z)

    2-4-5-6-7=====>(*)

    OBS.: NOTEM QUE ALGUMAS SEQUENCIAS DO SEGUNDO PASSO PODEM ENTRAR EM 2 SEQUENCIA DO TERCEIRO PASSO,

    É AI QUE MORA O SEGREDO DE DIMINUIR CADA VEZ MAIS A QUANTIDADE DE JOGOS.

    EX02:

    1-2-3-4-5

    1-3-4-6-7

    2-3-5-6-7

    EX03:

    .

    .

    .

    EX04:

    .

    .

    .

    OU SEJA PODE GERAR VARIAS MATRIZES (7_5_4_5) = 3

    AI ESTA A LÓGICA PARA SE FAZER UMA MATRIZ OTIMIZADA, NÃO BASTA SÓ PEGAR UMA MATRIZ OTIMIZADA NA NAIVO,

    NO ININUGA OU EM OUTRO QUALQUER PROGRAMA. TEM QUE SABER COMO ELAS SÃO FEITAS.

    "DEMOREI MUITO PRA TE ENCONTRAR, AGORA QUERO SÓ VC"..........UFA QUEIMEI A CABEÇA, MAS CONSEGUI.

    FUI..........................

    pelo que eu entendi do seu exemplo eu simplifique
    veja tenho a seguinte combinação 5 numeros de 2 a 2 é igual 10.
    quero forma grupos de 3.
    temos as combinações 2 a 2:
    1;2
    1;3
    1;4
    1;5
    2;3
    2;4
    2;5
    3;4
    3;5
    4;5
    queremos montar os grupos baseados na lista acima de 3.

    primeiro grupo a ser montado é 1;2 1;3 temos = 1;1;2;3
    removendo o duplicado o grupo é 1;2;3

    proximo grupo a ser montado é 1;4 1;5 temos = 1;1;4;5
    removendo o duplicado o grupo é 1;4;5

    proximo grupo a ser montado é 2;3 2;4 temos = 2;2;3;4
    removendo o duplicado o grupo é 2;3;4

    aqui temos uma inconcistencia. se você pudesse explicar melhor
    para uma resolução.
    proximo grupo a ser montado é 2;5 3;4 temos = 2;3;4;5
    grupo é maior do que 3. 
     reservamos 3;4


    proximo grupo a ser montado preservamos do anterior 2;5 com proximo 3,5 temos = 2;3;5;5
    removendo o duplicado o grupo é 2;3;5

    proximo grupo a ser montado preservamos 3;4 4,5 temos = 3;4;4;5
    removendo o duplicado o grupo é 3;4;5

    os grupos:
    1;2;3
    1;4;5
    2;3;4
    2;3;5
    3;4;5
     

    aguardo sua resposta.

  2. Em 13/01/2024 em 17:09, Ralf Jones disse:

    @Joelsonc3

     

     

    Texto do @rockcavera

    1) Gerar todas as combinações de V,K e vamos por em uma lista

    2) Selecione aleatoriamente uma combinação de V,K, adicione-a a sua lista Matriz e delete ela da lista do passo 1)

    3) Gerar todas as combinações de V,M, coloque em uma lista e delete aquelas que fazem T ou mais pontos com a combinação selecionada no passo 2)

    4) Agora você sabe a quantidade de combinações que uma única combinação de V,K consegue eliminar de V,M. Esse número vamos chamar de "Comb_VK_reduz_VM" e você obtém ele assim: Combinações de V,M - Tamanho da Lista de V,M Após a Exclusão) [1]. Temos por enquanto 3 listas: combinações de V,K; combinações de V,M; e Matriz. Cada uma com respectivamente N itens: C(V,K) - 1; C(V,M) - Comb_VK_reduz_VM; e 1 [2].

    5) Vamos obter o mínimo teórico, mas que nem sempre é alcançável. Fórmula: Ceil(C(V,M) / Comb_VK_reduz_VM) [3].

    6) Agora, enquanto a lista de V,M possuir combinações (itens), você vai fazer:

    6.1) Cruzar a lista de V,K contra a lista de V,M. Ou seja, pegar uma por uma das combinação da lista de V,K e contar quantas combinações de V,M fazem T ou mais pontos com cada uma.

    6.2) Depois de passar a lista toda de V,K, você vai pegar aquela combinação de V,K que mais fez T ou mais pontos com a atual lista de V,M, adicionar ela na lista Matriz, deletar da lista V,K e deletar as combinações de V,M que fazem T ou mais pontos com ela [4].

    6.3) Volte para 6)

    7) Se a lista V,M não possui mais combinações, ou seja, não tem mais itens, a sua lista Matriz possui uma matriz de V,K,T,M 100% coberta.

     

    Notas:

    [1] É possível obter esse número de outra forma, usando calculo matemático, mas não vou ensinar aqui, sendo que é possível se obter ele no meio do caminho do algoritmo por uma simples subtração.

    [2] A notação "C(n, k)" é para aplicar a formula da combinação de n,k.

    [3] Ceil(n) é usado para especificar que um número deve ser arredondado para cima caso não seja um inteiro. Ou seja, 1,1 vai ser arredondado para 2. 1,9 vai ser arredondado para 2.

    [4] Caso mais de uma combinação de V,K fizer os mesmos T ou mais pontos com a atual lista de V,M, você pode escolher aleatoriamente qualquer uma.

     

    Como pode ver, o fato de o mesmo algoritmo criar matrizes com B de tamanhos distintos está relacionado ao fato da escolha aleatória nos passos 2) e passo 6.2) quando cai no caso da nota [4]. Também, você pode observar que algumas coisas foram postas para você aprender a como calcular o mínimo teórico, que as vezes pode ser a menor matriz possível. A menor matriz possível vai ser sempre maior ou igual ao mínimo teórico.

     

    Outra coisa que posso passar aqui é o cálculo do mínimo teórico de matrizes V,K,T, onde T=M. Aqui é a fórmula de Schonheim.

     

    A fórmula de Schonheim é diferente do mínimo teórico apresentado no meu algoritmo. A fórmula de Schonheim pode ser maior ou igual ao mínimo teórico.

     

    Ainda existem dois outros algoritmos que conheço para redução, que são: recozimento simulado e o PDO (Problem Dependent Optimization). Aqui neste tópico você vai encontrar maiores informações.

     

     

    Eu fiz um algoritmo parecido, vou tomar como exemplo a mega sena, combinado 10 números em conjuntos 6 em 6 é igual 210 jogos,  se eu quero fazer um fechamento para garantir a quadra crio conjuntos 4 em 4 que da também 210. Aplicando a redução ou comparando as lista 1 e lista2, me retorna 23 volantes 100%. 4 acertos.

    o meu grande problema que tenho que varrer duas lista e processo se torna lento. eu busco é forma de processo ser mais rápido por isso a minha pergunta.

    segue abaixo:

    1;2;3;4;5;6
    1;2;3;4;8;10
    1;2;3;5;7;10
    1;2;3;7;8;9
    1;2;4;6;7;9
    1;2;5;6;7;8
    1;2;5;6;9;10
    1;2;6;8;9;10
    1;3;4;5;7;9
    1;3;5;6;8;9
    1;3;6;7;9;10
    1;4;5;6;9;10
    1;4;5;7;8;10
    1;4;6;8;9;10
    2;3;4;5;7;10
    2;3;4;5;8;9
    2;3;4;6;7;8
    2;3;4;6;9;10
    2;4;6;7;9;10
    2;5;7;8;9;10
    3;5;6;7;8;10
    3;5;6;8;9;10
    4;5;6;7;8;9

  3. Em 13/01/2024 em 23:32, -W6- disse:

    O @Substantivo escreveu um artigo muito interessante sobre redução:

    aqui está o link:
     

     

    Obrigado pelo exemplo, eu já tenho isso, no caso que você apresenta, se acerta 4 números, você só tem cartões com 3 acertos, se acerta as 5 sorteadas, você tem quadra no exemplo apresentado. neste exemplo sempre vai haver a dependência de uma dezena. iguais >= 4, eu pergunto resolver se for igual == 4,  ou seja se eu acerta apenas 4 quero encontra, por isso eu perguntei se existe alguma forma utilizando soma ou questão logica.

    exemplo simples de código abaixo faz isso: 

     

    package Quina;

    import java.util.Scanner;

    public class Quina {

        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);

            int[][] array = new int[999][5]; // matriz declaration
            int[] vetorA = new int[5]; // vetor declaration

            int qtde = 0, cont = 0, volantes = 0, reduzidos = 0;
            int n1, n2, n3, n4, n5;
            int Tamanho = 5;
            int iguais = 0;

            System.out.println("Qtde de dezenas a combinar:");
            qtde = scan.nextInt();

            for (n1 = 1; n1 <= qtde - 4; n1++) {
                vetorA[0] = n1;
                for (n2 = n1 + 1; n2 <= qtde - 3; n2++) {
                    vetorA[1] = n2;
                    for (n3 = n2 + 1; n3 <= qtde - 2; n3++) {
                        vetorA[2] = n3;
                        for (n4 = n3 + 1; n4 <= qtde - 1; n4++) {
                            vetorA[3] = n4;
                            for (n5 = n4 + 1; n5 <= qtde; n5++) {
                                vetorA[4] = n5;

                                volantes++; // count generated combinations

                                for (int k = 0; k <= cont; k++) {
                                     iguais = 0;
                                    for (int i = 0; i < Tamanho; i++) {
                                        for (int j = 0; j < Tamanho; j++) {
                                            if (vetorA[i] == array[k][j]) {
                                                iguais++;
                                            }
                                        }
                                    }
                                    if (iguais >= 4) {
                                        break;
                                    }
                                }

                                // if iguais is less than 4, store it in the matrix
                                if (iguais < 4) {
                                    cont++;
                                    for (int x = 0; x < Tamanho; x++) {
                                        array[cont][x] = vetorA[x];
                                    }
                                    System.out.println("cartoes " + cont + ": " + vetorA[0] + " " + vetorA[1] + " "
                                            + vetorA[2] + " " + vetorA[3] + " " + vetorA[4]);
                                    reduzidos++;
                                }
                            }
                        }
                    }
                }
            }
            System.out.println("total reduzidos:" + reduzidos);
            System.out.println("Total volantes:" + volantes);
        }
    }

     

     

      

    • Like 1
  4. Olá pessoal tudo bem, eu gostaria de uma orientação, qual é a melhor forma  para aplicar uma  buscar para garantir um  processamento eficiente para um fechamento sabendo das quantidades, se é  a "SOMA" e como fazer ou outra forma.

     

    Vou  desenvolver em java. no nosso exemplo eu usei 5 numeros combinados de 3 em 3 que é igual 10 volantes está abaixo a lista. Aplicando uma redução para se ter uma garantia 2 acertos 100%, temos 4 volantes.  Se alguém pode mostra como fazer, seja como codigo ou excel agaradeço. Assim que terminar codigo posto aqui.

     

    lista

    1    2    3
    1    2    4
    1    2    5
    1    3    4
    1    3    5
    1    4    5
    2    3    4
    2    3    5
    2    4    5
    3    4    5
            
    resultado

    1    2    3
    1    4    5
    2    3    4
    2    3    5
     

  5. Bem o algoritmos pelo eu entendi, você tá querendo dessa forma: 

    1 2 3 4 vai ate 15

    1 2

    1     3 

    1         4 assim até 15

    Depois com 

    1 2 3 4 5 6 ate 15

    1 2 3

    1 2     4

    1 2        5 assim ate 15

    Trabalhando conjunto 2, depois 3, depois 4, 5, 6, 7 isso não é difícil de fazer,  o meu problema está justamente no padrão v k t m =b

    Se alguém poder me enviar como fazer essa rotação,  posto a matriz completa. 

    • Like 2
  6. Em 29/05/2019 em 01:45, Wata disse:

    Vou deixar algo aqui caso interesse a alguém que possa desenvolver, ou queira comentar...

     

    A questão é encontrar um desdobramento que dê lucro se acertar 15 em 23 dezenas na Lotofácil (mas poderia ser qualquer outra coisa semelhante, já que é uma ideia bem genérica...:mellow:...);

     

    Segue meu “algoritmo”:

     

    1° gerar todas as linhas de 15dz. possíveis entre 23dz. totais;

    C23,15 = 490.314 (linhas de 15dz.)

     

    2° Combinar todas essas 490.314 linhas de 2 em 2 linhas (vai dar um valor grande o suficiente para eu não querer escrevê-lo aqui...:shock:...);

     

    3° Testar cada um desses grupos (desdobramentos) de 2 linhas contra todas as 490.314 linhas, até encontrar (se possível) um deles que dê lucro em todas as 490.314 linhas (que são todos os resultados possíveis SE 15 em 23);

     

    4° Caso exista algum desses desdobramentos (gerados no passo 2°) que dê lucro em qualquer um dos 490.314 resultados possíveis, então está finalizado a tarefa e teremos nosso desejado desdobramento com 100% lucro SE 15 em 23...:P...;

     

    5° Caso não encontrado nenhum desdobramento de 2 linhas com 100% lucro SE 15 em 23 , gerar todas as combinações de 490.314 linhas de 3 em 3 linhas (vai dar um valor grande o suficiente para eu não querer escrevê-lo aqui[2]...:wacko:...) e testar contra os 490.314 resultados possíveis até encontrar (se possível) algum que seja 100% lucro SE 15 em 23;

     

    6° E assim sucessivamente (com desdobramentos de 4 linhas, 5 linhas, 6 linhas...) até que seja encontrado (se é que existe...:wacko:...) o tal desdobramento que dê 100% lucro SE 15 em 23 (isso se seu equipamento não queimou ou vc ainda não desistiu...:blink:...);

     

    Bom, isso me leva a pensar que muitas coisas em loterias são, na teoria, simples... a questão são os recursos necessários para executá-las...

     

    E isso me leva a pensar outra coisa: Será que no futuro, com “computadores mágicos” (que podem fazer aquilo que vc pensar, mesmo vc não entendendo p**** nenhuma de como ele faz aquilo), as loterias (nos modelos que temos hoje...) poderão ser “facilmente” vencidas?

     

    :cool:

    ...

     

  7. Bom dia

    Pessoal talvez esse assunto já seja muito batido na net, mais eu não achei uma solução, eu estou querendo uma luz.

    Fechamento para acerto de terno na quina.

    o objetivo e acertar a logica do fechamento.

    Combinando 8 dezenas de grupos de 5 é igual 56 volantes, dentro desses 56 volantes a vários ternos repetidos, gostaria de remover esses ternos repetidos.

    detalhe não se preocupem com gerador ou quantidade para combinar.

    minha duvida:

     

    no código abaixo ele me apresenta a seguinte matriz.
    onde está o meu erro de logica, pois tem conjunto de três iguais
    que não encontro no fechamento na matriz abaixo.

     

    está na matriz abaixo, tem:
    123, 124, 125,134,135,145,234,234,345,
    126,127,128,267,267,278,345,346,347,356,357,367.

     

    não está na matriz abaixo, não tem:
    1 3 6; 1 3 7; 1 3 8; 1 4 6; 1 4 7; 1 4 8; 1 5 6; 1 5 7; 1 5 8;
    2 3 6; 2 3 7; 2 3 8; 2 4 5; 2 4 6; 2 4 7; 2 4 8; 2 5 6; 2 5 7;
    2 5 8; 2 6 7; 2 6 8; 2 7 8; 3 4 8; 3 5 6; 3 5 7; 3 5 8; 3 6 7;
    3 6 8; 3 7 8; 4 5 8; 4 6 7; 4 6 8; 4 7 8; 5 6 8; 5 7 8; 6 7 8;

    matriz do código:
    1 2 3 4 5
    1 2 6 7 8
    3 4 5 6 7

     

    como a matriz deve ficar:
    1 2 3 4 6;
    1 2 3 5 8;
    1 2 4 7 8;
    1 3 6 7 8;
    1 4 5 6 7;
    2 3 4 5 7;
    2 5 6 7 8;
    3 4 5 6 8;

    package br.Exercicio;

    import java.util.Scanner;

    public class CombinaReduzido {

        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int[] vetA = new int[5];
            int[][] array = new int[99999][5];       
            
            int num = 0, iguais = 0,cont = 0, total = 0;

            System.out.println("Digite numero Comb:");
            num = scan.nextInt();

            for (int n1 = 1; n1 <= num; n1++) {
                vetA[0] = n1;
                for (int n2 =n1 + 1;n2 <= num; n2++) {
                    vetA[1] = n2;
                    for (int n3 =n2 + 1;n3 <= num; n3++) {
                        vetA[2] = n3;
                        for (int n4 =n3 + 1;n4 <= num; n4++) {
                            vetA[3] = n4;
                            for (int n5 =n4 + 1;n5 <= num; n5++) {
                                vetA[4] = n5;

                                total++;                           
                               
                                
                                 for (int t = 0; t <= cont; t++) {                                
                                     iguais = 0;                                 
                                    for (int i = 0; i < 5; i++) {
                                        for (int j = 0; j < 5; j++) {                                        
                                            if (vetA == array[t][j]) {
                                                iguais = iguais + 1;
                                            }
                                                
                                            
                                        }
                                    }
                                    if (iguais > 3) {
                                        break;
                                    }
                                }
                                if (iguais < 3) {
                                    cont = cont + 1;
                                    for (int x = 0; x < 5; x++) {
                                        array[cont][x] = vetA[x];
                                    }
                                    System.out.println(" "+vetA[0]+" "+vetA[1]+" "+ vetA[2]+" "+ vetA[3]+" "+vetA[4]);
                                }

                            }                        
                        }
                    }
                }
            }
            System.out.println("reduzidos:"+ cont);
        System.out.println("total gerados:"+ total);
        }
    }
     

     

×
×
  • Create New...