题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
// HJ67 24点游戏算法.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include<iostream> #include<bits/stdc++.h> using namespace std; double cut(double a, double b, char op)//运算包含有括号的情况 { switch (op) { case '+':return a + b; case '-':return a - b; case '*':return a * b; case '/':return a / b; } return 0; } bool check(vector<double>& dp)//check函数,检查是否为胜利数 { vector<char>op = { '+','-','*','/' };//定义一个char类型的数组 sort(dp.begin(), dp.end()); do { for (int i = 0; i < 4; i++)//四个数字有三个运算符 { for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { double first = cut(dp[0], dp[1], op[i]); double second = cut(first, dp[2], op[j]); double res = cut(second, dp[3], op[k]); if (res == 24) { return true; } } } } } while (next_permutation(dp.begin(), dp.end()));//执行下一次排序,如有下一次排序则返回true程序循环,如没有返回false推出循环 return false; } int main() { vector<double>dp(4); //for (int i = 0; i < 4; i++) //{ // cin >> dp[i]; //} while (cin >> dp[0] >> dp[1] >> dp[2] >> dp[3])//连续输入 { if (check(dp)) { cout << "true" << endl; } else { cout << "false" << endl; } } return 0; }