1부터 13까지의 숫자 4개를 더하고, 빼고, 곱하고 나누어서 24점을 계산합니다.
구현 원칙:
1) 4개의 숫자를 배열하고 결합한다
2) 각 순열과 조합의 가능성을 계산한다.
Cal24.java
import java.util.HashSet;import java.util.Set; public class Cal24 { private static final double 정밀도 = 0.00001; private static final int target = 24; public String[] run(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 handler(int[] result) { final int[] r = result 조합 연산자 = new Combination(){ @Override protected void handler(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 연산){ 스위치(연산) { 케이스 0: x + y 반환; 사례 2: 반환 x * y; 기본값: 0 반환 } } private static String getOperation(int 작업) ) { 사례 0: "+" 반환; 사례 2: "*" 반환; 기본값: "" 반환 main(String[] args) { System.out.println(new Cal24().calc(new int[]{1, 5, 5, 5}));조합.java
공용 추상 클래스 조합 { 개인 부울 반복; 개인 int 합계 = 0; 공공 무효 결합(int 데이터[]){ 결합(데이터, 데이터.길이, 거짓) } 공공 무효 결합(int 데이터[], int 개수) 결합(데이터, 개수, 거짓); } 공개 무효 결합(int 데이터[], int 개수, 부울 반복){ this.repeat = 반복 = data.length; (int)Math.pow(times, count); for (int i = 0; i < size; i++) { int[] result = toArray(data, i, count); if(result != null); 결과); 총계 ++; } } } private int[] toArray(int data[], int i, int count){ int [] indices = new int[count]; data.length; for (int j = 0; j < count; j++) { int temp = 0; if(i > 0){ temp = i%times; i = (i - temp)/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] for (int x = 0; x < count; x++) { int selected = data[indices[x]]; result[x] = selected; } 결과 반환 } public int getTotal() { return total; 결과);}이상이 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.