描述
给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算
此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。
输入描述:
读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。
输出描述:
对于每组案例,输出一行表示能否得到24点,能输出true,不能输出false
示例1
输入:
7 2 1 10
复制输出:
true
#include <iostream>
#include <vector>
#include <algorithm>
double cal(double a, double b, char op)
{
double val = 0.0;
switch (op)
{
case '+':
val = a + b;
break;
case '-':
val = a - b;
break;
case '*':
val = a * b;
break;
case '/':
val = a / b;
break;
default:
break;
}
return val;
}
bool twentyFourGame(std::vector<double> numVect)
{
char op[4] = {'+', '-', '*', '/'};
std::sort(numVect.begin(), numVect.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 = cal(numVect[0], numVect[1], op[i]);
double second = cal(first, numVect[2], op[j]);
if(cal(second, numVect[3], op[k]) == 24)
{
return true;
}
}
}
}
} while (std::next_permutation(numVect.begin(), numVect.end()));
return false;
}
int main() // 7 2 1 10
{
int n = 4;
std::vector<double> numVect;
while(n--)
{
double temp = 0;
std::cin >> temp;
numVect.push_back(temp);
}
bool falg = twentyFourGame(numVect);
if(falg == 1)
{
std::cout << "true" << std::endl;
}
else
{
std::cout << "false" << std::endl;
}
return 0;
}