24点游戏

遍历法:

 1 public class Calculate {
 2 
 3     final double Threshold = 1E-6;
 4     final int CardsNumber = 4;
 5     final int ResultValue = 24;
 6     double number[] = new double[CardsNumber];
 7     String result[]=new String[CardsNumber];
 8     
 9     public boolean PointsGame(int n){
10         if(n == 1){
11             if(Math.abs(number[0]-ResultValue)<Threshold){
12                  System.out.println(result[0]);
13                  return true;
14             }else{
15                 return false;
16             }
17         }
18         for(int i=0; i<n ; i++){
19             for(int j=i+1; j<n; j++){
20                 double a,b;
21                 String expa, expb;
22                 a = number[i];
23                 b = number[j];
24                 number[j] = number[n - 1];
25                 
26                 expa = result[i];
27                 expb = result[j];
28                 result[j] = result[n - 1];
29                 
30                 result[i] = "(" + expa + "+" + expb + ")";
31                 number[i] = a + b;
32                 if(PointsGame(n - 1))
33                     return true;
34                 
35                 result[i] = "(" + expa + "-" + expb + ")";
36                 number[i] = a - b;
37                 if(PointsGame(n - 1))
38                     return true;
39                 
40                 result[i] = "(" + expb + "-" + expa + ")";
41                 number[i] = b - a;
42                 if(PointsGame(n - 1))
43                     return true;
44                 
45                 result[i] = "(" + expa + "*" + expb + ")";
46                 number[i] = a * b;
47                 if(PointsGame(n - 1))
48                     return true;
49                 
50                 if(b!=0){
51                     result[i] = "(" + expa + "/" + expb + ")";
52                     number[i] = a / b;
53                     if(PointsGame(n - 1))
54                         return true;
55                 }
56                 
57                 if(a!=0){
58                 result[i] = "(" + expb + "/" + expa + ")";
59                 number[i] = b - a;
60                 if(PointsGame(n - 1))
61                     return true;
62                 }
63                 
64                 number[i] = a;
65                 number[j] = b;
66                 result[i] = expa;
67                 result[j] = expb;
68             }
69         }
70         return false;
71     }
72     /**
73      * @param args
74      */
75     public static void main(String[] args) {
76 
77         Calculate ca = new Calculate();
78         ca.number[0] = 11;
79         ca.number[1] = 8;
80         ca.number[2] = 3;
81         ca.number[3] = 5;
82         ca.result[0] = "11";
83         ca.result[1] = "8";
84         ca.result[2] = "3";
85         ca.result[3] = "5";
86         ca.PointsGame(4);
87     }
88 
89 }

posted on 2012-10-25 16:15  chlde2500  阅读(139)  评论(0编辑  收藏  举报

导航