首页 > 代码库 > 24点 C/C++代码
24点 C/C++代码
#include<iostream> #include<string> #include<cmath> using namespace std; const double PRECISION = 1E-6; const int COUNT = 4; const int RESULT = 24; double number[COUNT]; //这里一定要用double,看看第一题的答案就知道为什么了 string expression[COUNT]; //保存表达式 bool Test(int n) { //递归结束 if (n == 1) { if (fabs(number[0] - RESULT) < PRECISION) { cout << expression[0] << endl; return true; } else return false; } //递归过程 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { double a, b; string expa, expb; a = number[i]; b = number[j]; number[j] = number[n - 1]; expa = expression[i]; expb = expression[j]; expression[j] = expression[n - 1]; expression[i] = ‘(‘ + expa + ‘+‘ + expb + ‘)‘; number[i] = a + b; if (Test(n - 1)) return true; //减号有两种情况,a-b与b-a expression[i] = ‘(‘ + expa + ‘-‘ + expb + ‘)‘; number[i] = a - b; if (Test(n - 1)) return true; expression[i] = ‘(‘ + expb + ‘-‘ + expa + ‘)‘; number[i] = b - a; if (Test(n - 1)) return true; expression[i] = ‘(‘ + expa + ‘*‘ + expb + ‘)‘; number[i] = a * b; if (Test(n - 1)) return true; //除法也有两种情况,a/b与b/a if (b != 0) { expression[i] = ‘(‘ + expa + ‘/‘ + expb + ‘)‘; number[i] = a / b; if (Test(n - 1)) return true; } if (a != 0) { expression[i] = ‘(‘ + expb + ‘/‘ + expa + ‘)‘; number[i] = b / a; if (Test(n - 1)) return true; } //恢复数组 number[i] = a; number[j] = b; expression[i] = expa; expression[j] = expb; } } return false; } int main(void) { for (int i = 0; i < COUNT; i++) { char buffer[20]; int x; cin >> x; number[i] = x; itoa(x, buffer, 10); expression[i] = buffer; } if (Test(COUNT)) cout << "Success" << endl; else cout << "Fail" << endl; system("pause"); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。