给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利

问题描述:

给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且不考虑括号运算
此题允许数字重复,如3 3 4 4为合法输入,但是每个数字只允许使用一次,如此处一共有两个3,则运算过程中两个3都被选取计算一次,所以3被调用运算两次,但是对应读入的两个数字

img


#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;
}