Criar fechamento

Boa Tarde

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


eu coloquei endereço acima, para vocês entenderem melhor, o padrão abaixo de como aplicar, ou seja o código ele atinge condição é não a garantia.

V = Total de dezenas da matriz
K = Tamanho dos blocos (qtd de dezenas do bilhete)
T = Garantia
M = Condição

V=:8

K=:5

T:=3

M:=3

aqui tá todas as sequencias de três : 123, 124, 125, 126, 127, 128, 134, 135, 136, 137, 138, 145, 146, 147, 148, 156, 157, 158, 167, 168, 178, 234, 235, 236, 237, 238, 245, 246, 247, 248, 256, 257, 258, 267, 268, 278, 345, 346, 347, 348, 356, 357, 358, 367, 368, 378, 456, 457, 458, 467, 468, 478, 567, 568, 578, 678.

A matriz abaixo, possui pelo menos 01 volante com a garantia de 3 acertos iguais, ou seja se você procurar qualquer conjunto da sequencia acima você acha na matriz abaixo, foi o que eu não conseguir atingir.

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[999][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[i] == array[t][j]) {
                                        iguais = iguais + 1;
                                    }
                                }
                            }
                            if (iguais >= 4) {
                                break;
                            }
                        }
                        if (iguais < 4) {
                            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);
}

}

O blogger não desenvolveu a formulá não.
Não dá para entender como seria aplicada a recursividade.
Ele jogou um >= lá e caiu fora.
Além disso não é explicada como se da a distribuição das dezenas.