Quaisquer 4 números de 1 a 13, adicione, subtraia, multiplique e divida para calcular 24 pontos.
Princípio de implementação:
1) Organize e combine 4 números
2) Calcule a possibilidade de cada permutação e combinação
Cal24.java
importar java.util.HashSet; importar java.util.Set; classe pública Cal24 { private static final double Precision = 0,00001; = new int[4]; for (int i = 0; i < inputs.length; i++) { dígitos[i] = Integer.valueOf(inputs[i]); } return new String[]{calc(dígitos)}; } private String calc(final int data[]){ final Set<String> out = new HashSet<String>(); Dígito de combinação = new Combination() { @Override protected void handle(int[] result) { final int[] r = result Combination oper = new Combination(){ @Override protected void; handle(int[] c) { double x = r[0]; for (int i = 0; i < r.length - 1; i++) { x = doCalculate(x, r[i + 1], c[i ]); } if(Math.abs(Math.abs(x) - alvo) < precisão || Math.abs(Math.abs(1/x) - alvo) < precisão){ StringBuilder sb = novo StringBuilder(); for (int j = 0; j < r.length; j++) { sb.append(r[j]); j])); 3}, data.length - 1, true); digit.combine(data); StringBuilder sb = new StringBuilder(); /n"); } return sb.toString(); } private double doCalculate(double x, double y, operação int){ switch (operação) { case 0: retornar x + y; caso 1: retornar x - y; caso 2: retornar x * y; caso 3: retornar x / y; padrão: retornar 0; ) { case 0: return "+"; case 1: return "-"; case 2: return "*"; main(String[] args) { System.out.println(new Cal24().calc(new int[]{1, 5, 5, 5}));Combinação.java
combinação de classe abstrata pública { repetição booleana privada; combinar(dados, contagem, falso); } public void combinar(int dados[], contagem int, repetição booleana){ this.repeat = repetir int vezes = data.length; (int)Math.pow(tempos, contagem); for (int i = 0; i < tamanho; i++) { int[] resultado = toArray(dados, i, contagem); resultado); total ++; } } } private int[] toArray(int data[], int i, int count){ int [] índices = new int[count]; data.length; for (int j = 0; j < contagem; j++) { int temp = 0; ] = temp; } if(!repeat){ //remover repetição for (int x = 0; x < count; x++) { for(int y = 0; y < count; y++){ if(x != y){ if(índices[x] == índices[y]) return null } } } } int [] resultado = new int[contagem] for (int x = 0; x < contagem; x++) { int selecionado = dados[índices[x]]; resultado[x] = selecionado } return resultado; public int getTotal() { return total } protected abstract void handle(int[] resultado);}O texto acima é todo o conteúdo deste artigo, espero que todos gostem.