4 angka apa pun dari 1 hingga 13, tambahkan, kurangi, kalikan, dan bagi untuk menghitung 24 poin.
Prinsip implementasi:
1) Susun dan gabungkan 4 angka
2) Hitung kemungkinan setiap permutasi dan kombinasi
Cal24.java
impor java.util.HashSet;impor java.util.Set; public class Cal24 { presisi ganda akhir statis pribadi = 0,00001; target int akhir statis pribadi = 24; string publik[] eksekusi(String[] input) { int[] digit = new int[4]; for (int i = 0; i < input.panjang; i++) { digit[i] = Integer.valueOf(inputs[i]); } kembalikan String baru[]{calc(digits)}; } private String calc(final int data[]){ final Set<String> out = new HashSet<String>(); Kombinasi digit = Kombinasi baru() { @Override protected void handle(int[] result) { final int[] r = Kombinasi oper = new Combination(){ @Override protected void menangani(int[] c) { ganda x = r[0]; untuk (int i = 0; i < r.panjang - 1; i++) { x = doCalculate(x, r[i + 1], c[i ]); } if(Math.abs(Math.abs(x) - target) < presisi || Math.abs(Math.abs(1/x) - target) < presisi){ StringBuilder sb = baru StringBuilder(); untuk (int j = 0; j < r.panjang; j++) { sb.append(r[j]); j])); } } keluar.tambahkan(sb.toString()); } } }; oper.combine(int baru[]{0, 1, 2, 3}, data.panjang - 1, benar); } }; digit.combine(data); StringBuilder sb = new StringBuilder(); untuk (String string : keluar) { sb.append(string); /n"); } return sb.toString(); } private double doCalculate(double x, double y, int operasi){ switch (operasi) { case 0: kembalikan x + y; kasus 1: kembalikan x - y; kasus 2: kembalikan x * y; kasus 3: kembalikan x / y; default: kembalikan 0; ) { kasus 0: kembalikan "+"; kasus 1: kembalikan "-"; kasus 2: kembalikan "*"; kasus 3: kembalikan "/"; main(String[] args) { System.out.println(new Cal24().calc(new int[]{1, 5, 5, 5}) }}Kombinasi.java
kombinasi kelas abstrak publik { pengulangan boolean pribadi total int pribadi = 0; kombinasi kekosongan publik(int data[]){ kombinasi(data, data.panjang, salah } kombinasi kekosongan publik(int data[], jumlah int){ gabungkan(data, hitung, salah); } public void gabung(int data[], int hitung, ulangi boolean){ ini.ulangi = ulangi int kali = data.panjang; (int)Math.pow(kali, hitung); for (int i = 0; i < ukuran; i++) { int[] hasil = toArray(data, i, hitung); hasil); total ++; } } } private int[] toArray(int data[], int i, int count){ int [] indeks = int baru[int kali = 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){ //hapus pengulangan untuk (int x = 0; x < count; x++) { for(int y = 0; y < count; y++){ if(x != y){ if(indeks[x] == indeks[y]) mengembalikan nol; } } } } int [] hasil = int[hitungan] baru; untuk (int x = 0; x < hitungan; x++) { int dipilih = data[indeks[x]]; hasil[x] = dipilih; } mengembalikan hasil; } public int getTotal() { mengembalikan total; hasil);}Di atas adalah keseluruhan isi artikel ini, saya harap Anda semua menyukainya.