题解 | #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;
}
查看13道真题和解析
