给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利
问题描述:
给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且不考虑括号运算
此题允许数字重复,如3 3 4 4为合法输入,但是每个数字只允许使用一次,如此处一共有两个3,则运算过程中两个3都被选取计算一次,所以3被调用运算两次,但是对应读入的两个数字
答
#include <stdio.h>
#include <algorithm>
using namespace std;
const int N=4;
int num[N];
int isSolve=0;
void dfs(int index,int currentNum,int arr[])
{
if(currentNum==24)
{
isSolve=1;
return;
}
if(isSolve||currentNum>24||index>=4)
return;
for(int operFlag=0;operFlag<4;operFlag++)
{
switch(operFlag)
{
case 0:
dfs(index+1,currentNum+arr[index],arr);
break;
case 1:
dfs(index+1,currentNum-arr[index],arr);
break;
case 2:
dfs(index+1,currentNum*arr[index],arr);
break;
case 3:
dfs(index+1,currentNum/arr[index],arr);
break;
}
if(isSolve)
return;
}
}
int main()
{
while(scanf("%d%d%d%d",&num[0],&num[1],&num[2],&num[3])>0)
{
isSolve=0;
sort(num,num+4);
do
{
dfs(1,num[0],num);
if(isSolve)
break;
} while (next_permutation(num,num+4));
if(isSolve)
printf("true\n");
else
printf("false\n");
}
return 0;
}