1 から 13 までの 4 つの数字を加算、減算、乗算、除算して 24 点を計算します。
実装原則:
1) 4つの数字を並べて組み合わせる
2) それぞれの順列と組み合わせの可能性を計算する
Cal24.java
import java.util.HashSet;import java.util.Set; public class Cal24 { private static Final double precision = 0.00001; public String[]execute(String[] inputs) { int[] 数字= 新しい int[4]; for (int i = 0; i < inputs.length; i++) { 数字[i] = Integer.valueOf(inputs[i]); } return new String[]{calc(digits)}; } private String calc(final int data[]){final Set<String> out = new HashSet<String>();組み合わせ数字 = new Combination() { @Override protected void handle(int[] result) { Final int[] r = result; 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) - ターゲット) < 精度 || Math.abs(Math.abs(1/x) - ターゲット) < 精度){ StringBuilder sb = new 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); } }; StringBuilder sb = new StringBuilder(); for (String string : out) { sb.append(" /n"); } return sb.toString(); } private double doCalculate(double x, double y, int 操作){ switch (操作) { case 0: x + y を返す; ケース 1: x - y を返す; ケース 3: x / y を返す; } } private static String getOperation(int 操作) ) { ケース 0: "+" を返す; ケース 2: "/" を返す; } } public static void main(String[] args) { System.out.println(new Cal24().calc(new int[]{1, 5, 5, 5}));組み合わせ.java
public abstract class Combination { private booleanrepeat; private int total = 0; public void combin(int data[]){ combin(data, data.length, false) } public void combin(int data[], int count); join(data, count, false); } public void combin(int data[], int count, booleanrepeat){ this.repeat = int 回 = data.length = (int)Math.pow(times, count); for (int i = 0; i < size; i++) { int[] result = toArray(data, i, count){ handle(結果); 合計 ++; } } } private int[] toArray(int data[], int i, int count){ int [] インデックス = new int 回数 = data.length; for (int j = 0; j < count; j++) { int temp = 0; if(i > 0){ temp = i%times; } インデックス] = temp; } if(!repeat){ //繰り返しを削除 for (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; } public int getTotal() { return total;結果);}以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。