1.16 24点游戏
生活随笔
收集整理的這篇文章主要介紹了
1.16 24点游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
24點游戲的解決辦法,也是采取窮舉法的思路,4個數,有4!=24中排列的方法,然后3個操作符號,有4×4×4 = 64種結果,再加上括號,有5種結果,于是,每4個數有24*66*5 = 7680中結果。
為了簡便計算,原書中給出的第一種方法采取這樣一種遞歸的思路:
1 /* 2 <編程之美> 3 深搜 4 遍歷運算符, 數和括號的所有排列形式 5 */ 6 #include <iostream> 7 #include <string> 8 #include <math.h> 9 10 using namespace std; 11 12 const double Threshold = 1e-6; 13 const int CardsNumber = 4; 14 const int ResultValue = 24; 15 double number[CardsNumber]; 16 string result[CardsNumber]; 17 18 bool PointGame(int n) 19 { 20 if(n == 1) 21 { 22 if(fabs(number[0] - ResultValue) < Threshold) 23 { 24 cout << result[0] << endl; 25 return true; 26 } 27 else 28 { 29 return false; 30 } 31 } 32 33 for(int i = 0; i < n; i++) 34 { 35 for(int j = i +1 ; j < n; j++) 36 { 37 double a, b; 38 string expa, expb; 39 40 a = number[i]; 41 b = number[j]; 42 number[j] = number[n - 1]; 43 44 expa = result[i]; 45 expb = result[j]; 46 result[j] = result[n-1]; 47 48 //+加法操作 a+b 49 number[i] = a + b; 50 result[i] = '(' + expa + '+' + expb + ')'; 51 if(PointGame(n-1)) 52 { 53 return true; 54 } 55 56 //減法操作 a-b 57 number[i] = a - b; 58 result[i] = '(' + expa + '-' + expb + ')'; 59 if(PointGame(n-1)) 60 { 61 return true; 62 } 63 64 //減法操作 b-a 65 number[i] = b - a; 66 result[i] = '(' + expb + '-' + expa + ')'; 67 if(PointGame(n-1)) 68 { 69 return true; 70 } 71 72 //乘法操作 a*b 73 number[i] = a * b; 74 result[i] = '(' + expa + '*' + expb + ')'; 75 if(PointGame(n-1)) 76 { 77 return true; 78 } 79 80 //除法操作 a/b, 如果除數不為0 81 if(b != 0) 82 { 83 number[i] = a / b; 84 result[i] = '(' + expa + '/' + expb + ')'; 85 if(PointGame(n-1)) 86 { 87 return true; 88 } 89 } 90 91 //除法操作 b/a , 如果除數不為0 92 if(a != 0) 93 { 94 number[i] = b / a; 95 result[i] = '(' + expb + '/' + expa + ')'; 96 if(PointGame(n-1)) 97 { 98 return true; 99 } 100 } 101 102 number[i] = a; 103 number[j] = b; 104 result[i] = expa; 105 result[j] = expb; 106 107 } 108 } 109 return false; 110 111 } 112 113 int main() 114 { 115 int x; 116 for(int i =0; i< CardsNumber; i++) 117 { 118 char buffer[20]; 119 cout << "the " << i << "the number: "; 120 cin >> x; 121 number[i] = x; 122 itoa(x,buffer,10); 123 result[i] = buffer; 124 125 } 126 127 if(PointGame(CardsNumber)) 128 { 129 cout << "Success" << endl; 130 131 } 132 else 133 { 134 cout << "failure" << endl; 135 } 136 system("pause"); 137 return 0; 138 }?
?
轉載于:https://www.cnblogs.com/CBDoctor/archive/2012/07/30/2615014.html
總結
以上是生活随笔為你收集整理的1.16 24点游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android RenderScript
- 下一篇: Exchange Server 的防火墙