4 nombres quelconques de 1 à 13, additionnez, soustrayez, multipliez et divisez pour calculer 24 points.
Principe de mise en œuvre :
1) Organisez et combinez 4 nombres
2) Calculer la possibilité de chaque permutation et combinaison
Cal24.java
importer java.util.HashSet; importer java.util.Set; public class Cal24 {privé statique final double précision = 0,00001; privé statique final int cible = 24; public String[] exécuter (String[] entrées) { int[] chiffres = nouveau int[4]; pour (int i = 0; i < inputs.length; i++) { chiffres[i] = Integer.valueOf(inputs[i]); } return new String[]{calc(digits)}; } private String calc(final int data[]){ final Set<String> out = new HashSet<String>(); Combinaison chiffre = new Combinaison() { @Override protected void handle(int[] result) { final int[] r = combinaison oper = new Combinaison(){ @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) - cible) < précision || Math.abs(Math.abs(1/x) - cible) < précision){ StringBuilder sb = nouveau StringBuilder(); for (int j = 0; j < r.length; j++) { sb.append(r[j]); if(j != r.length - 1){ sb.append(getOperation(c[ j])); } } out.add(sb.toString()); } } }; 3}, data.length - 1, true } }; digit.combine(data); StringBuilder sb = new StringBuilder(); for (String string : out) { sb.append(string); /n"); } return sb.toString(); } private double doCalculate(double x, double y, int opération){ switch (opération) { case 0 : retour x + y ; cas 1 : retour x - y ; cas 2 : retour x * y ; cas 3 : retour x / y ; par défaut : retour 0 ; ) { case 0 : return "+" ; case 1 : return "-" ; case 2 : return "*" ; case 3 : return "/" par défaut : return "" ; main(String[] args) { System.out.println(new Cal24().calc(new int[]{1, 5, 5, 5}) }}Combinaison.java
combinaison de classe abstraite publique { répétition booléenne privée ; privé int total = 0 ; public void combiner(int data[]){ combiner(data, data.length, false } public void combiner(int data[], int count){ combiner(data, count, false); } public void combiner(int data[], int count, boolean repeat){ this.repeat = répéter int times = data.length int ; (int)Math.pow(times, count); for (int i = 0; i < size; i++) { int[] result = toArray(data, i, count); if(result != null){ handle( résultat); total ++; } } } private int[] toArray(int data[], int i, int count){ int [] indices = new int[count]; data.length; pour (int j = 0; j < nombre; j++) { int temp = 0; if(i > 0){ temp = i%times; i = (i - temp)/times; ] = temp; } if(!repeat){ //supprimer la répétition pour (int x = 0; x < count; x++) { for(int y = 0; y < count; y++){ if(x != y){ if(indices[x] == indices[y]) return null } } } } int [] result = new int[count]; x++) { int selected = data[indices[x]]; result[x] = selected; return result } public int getTotal() { return total } protected abstract void handle(int[] résultat);}Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.