您的位置:首页 > 编程语言 > C语言/C++

24点

2015-07-28 11:16 555 查看
[来自华为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  24点 游戏 华为 OJ C++