24点
24点运算
http://www.nowcoder.com/questionTerminal/7e124483271e4c979a82eb2956544f9d
深搜dfs
测试用例有问题,24点会有多组解的可能,通过65%,还看不到测试用例,好坑,本地测试ac。
#include <iostream> #include<string> #include<string.h> #include <algorithm> using namespace std; int num[4]; int signal; string operations = "+-*/"; bool dfs(int start,int sum) { if (start==4&&sum == 24) { signal = 1; for (int i = 0; i < 3; i++) { cout << num[i] << operations[i]; } cout << num[3] << endl; return true; } for (int i =start; i < 4; i++) { if (!signal) { operations[start - 1] = '+'; dfs(start + 1, sum + num[start]); } if (!signal) { operations[start - 1] = '-'; dfs(start + 1, sum - num[start]); } if (!signal) { operations[start - 1] = '*'; dfs(start + 1, sum * num[start]); } if (!signal) { operations[start - 1] = '/'; dfs(start + 1, sum / num[start]); } } return signal; } int main() { string str[4], strData = " A234567891JQK"; while (cin>>str[0]>> str[1] >> str[2] >> str[3] ) { int error = 0; signal = 0; for (int i=0;i<4;i++) { if (str[i] == "10") num[i] = 10; else if (strData.npos == strData.find(str[i])) { error = 1; cout << "ERROR" << endl; break; } else num[i] = strData.find_first_of(str[i]); } if (!error) { do { if (dfs(1, num[0])) break; } while (next_permutation(num, num + 4)); if (!signal) cout << "NONE" << endl; } } return 0; }