[来自华为OJ]
问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利。
输入:4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
输出:True or False
示例:
输入
7 2 1 10
输出
True
#include <iostream>
#include <algorithm>
using namespace std;
int CalcNum(int iNum1, int iNum2, int iNum3, int iNum4, int idx1, int idx2, int idx3)
{
int iSum = 0;
if (idx1 == 0)
{
iSum = iNum1 + iNum2;
}
else if (idx1 == 1)
{
iSum = iNum1 - iNum2;
}
else if (idx1 == 2)
{
iSum = iNum1 * iNum2;
}
else if (idx1 == 3)
{
iSum = iNum1 / iNum2;
}
if (idx2 == 0)
{
iSum += iNum3;
}
else if (idx2 == 1)
{
iSum -= iNum3;
}
else if (idx2 == 2)
{
iSum *= iNum3;
}
else if (idx2 == 3)
{
iSum /= iNum3;
}
if (idx3 == 0)
{
iSum += iNum4;
}
else if (idx3 == 1)
{
iSum -= iNum4;
}
else if (idx3 == 2)
{
iSum *= iNum4;
}
else if (idx3 == 3)
{
iSum /= iNum4;
}
return iSum;
}
bool Game24Points(int a, int b, int c, int d)
{
int iNum[4] = {a, b, c, d};
int idx1, idx2, idx3;
for (idx1 = 0; idx1 < 4; ++idx1)
{
for (idx2 = 0; idx2 < 4; ++idx2)
{
for (idx3 = 0; idx3 < 4; ++idx3)
{
do
{
if (CalcNum(iNum[0], iNum[1], iNum[2], iNum[3], idx1, idx2, idx3) == 24)
{
return true;
}
} while (next_permutation(iNum, iNum + 4));
}
}
}
return false;
}
int main(void)
{
while (1)
{
int iNum[4] = {0};
for (int i = 0; i < 4; ++i)
{
cin >> iNum[i];
}
if (Game24Points(iNum[0], iNum[1], iNum[2], iNum[3]))
{
cout << "True" << endl;
}
else
{
cout << "False" << endl;
}
}
return 0;
}