国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java編寫的24點紙牌游戲

2019-11-26 15:14:12
字體:
來源:轉載
供稿:網友

任意4個1-13數字,加減乘除計算24點。

實現原理:

1)排列組合4個數字
2)計算每次排列組合的可能性

Cal24.java

import java.util.HashSet;import java.util.Set;  public class Cal24 {   private static final double precision = 0.00001;  private static final int target = 24;      public String[] execute(String[] inputs) {    int[] digits = new int[4];    for (int i = 0; i < inputs.length; i++) {      digits[i] = Integer.valueOf(inputs[i]);    }    return new String[]{calc(digits)};  }         private String calc(final int data[]){    final Set<String> out = new HashSet<String>();    Combination digit = 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) - target) < precision || Math.abs(Math.abs(1/x) - target) < precision){              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());            }                       }        };        oper.combine(new int[]{0, 1, 2, 3}, data.length - 1, true);               }    };         digit.combine(data);         StringBuilder sb = new StringBuilder();    for (String string : out) {      sb.append(string);      sb.append("/n");    }    return sb.toString();  }              private double doCalculate(double x, double y, int operation){    switch (operation) {    case 0:      return x + y;    case 1:      return x - y;    case 2:      return x * y;    case 3:      return x / y;    default:      return 0;    }  }     private static String getOperation(int operation){    switch (operation) {    case 0:      return "+";    case 1:      return "-";    case 2:      return "*";    case 3:      return "/";    default:      return "";    }  }    public static void main(String[] args) {    System.out.println(new Cal24().calc(new int[]{1, 5, 5, 5}));  }}

Combination.java

public abstract class Combination {  private boolean repeat;  private int total = 0;     public void combine(int data[]){    combine(data, data.length, false);  }     public void combine(int data[], int count){    combine(data, count, false);  }     public void combine(int data[], int count, boolean repeat){    this.repeat = repeat;    int times = data.length;    int size = (int)Math.pow(times, count);    for (int i = 0; i < size; i++) {      int[] result = toArray(data, i, count);      if(result != null){        handle(result);        total ++;      }    }  }        private int[] toArray(int data[], int i, int count){    int [] indices = new int[count];    int times = data.length;    for (int j = 0; j < count; j++) {      int temp = 0;      if(i > 0){        temp = i%times;        i = (i - temp)/times;      }      indices[j] = temp;    }              if(!repeat){      //remove repetition      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;    }         return result;  }     public int getTotal() {    return total;  }  protected abstract void handle(int[] result);}

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉安市| 桐城市| 邳州市| 新建县| 潞西市| 灌阳县| 韩城市| 晴隆县| 灵寿县| 南涧| 惠安县| 出国| 宝清县| 固始县| 福贡县| 奉化市| 抚顺市| 安平县| 泸水县| 厦门市| 阿坝县| 东阿县| 甘德县| 五莲县| 桓仁| 东平县| 耒阳市| 乌鲁木齐县| 施秉县| 思茅市| 手机| 甘南县| 襄垣县| 旌德县| 大连市| 合川市| 满城县| 延津县| 遵义县| 三穗县| 东方市|