24点

来源:互联网 发布:java监听数据库表变化 编辑:IT博客网 时间:2020/02/25 15:04

#include <iostream>
#define ADD 1
#define MINUS 2
#define MULTIPLY 3
#define DIVIDE 4
int compute(int a,int oper,int b)
{
   
    switch (oper)
    {
    case ADD:
        return a+b;
        break;
    case MINUS:
        return a-b;
        break;
    case MULTIPLY:
        return a*b;
    case DIVIDE:
        return a/b;
    }
   
}
char toOperator(int op)
{
    switch (op)
    {
    case ADD:
        return '+';
    case MINUS:
        return '-';
        break;
    case MULTIPLY:
        return '*';
    case DIVIDE:
        return '/';
 
    }
}
bool duplicate(int a,int b,int c,int d)
{

    int arr[4];
    arr[0]=a;
    arr[1]=b;
    arr[2]=d;
    for (int i=0;i<4;i++)
        for (int j=0;j<4;j++)
            if (i!=j)
            {
                if (arr[i]==arr[j]) return true;
            }


            return false;
}

void main()
{
    int inputNums[4]={18,3,4,6};
    int inputOps[4]={1,2,3,4};
    int nums[256][4];
    int op[64][3];
    int res1,res2,res3;
    int count=0;
    int count1=0;
 
    for (int i=0;i<4;i++)
        for (int j=0;j<4;j++)
            for (int m=0;m<4;m++)
                for (int n=0;n<4;n++)
                 
                    if (!duplicate(i,j,m,n))
                    {
                        nums[count][0]=i;
                        nums[count][1]=j;
                        nums[count][2]=m;
                        nums[count][3]=n;
                        count++;
                    }

    for (int i=0;i<4;i++)
        for (int j=0;j<4;j++)
            for (int m=0;m<4;m++)
            {
                op[count1][0]=i;
                op[count1][1]=j;
                op[count1][2]=m;
                count1++;
            }
    for (int i=0;i<count;i++)
        for (int j=0;j<count1;j++)
        {
            int x=inputNums[nums[i][0]];
            int y=inputNums[nums[i][1]];
            int z=inputNums[nums[i][2]];
            int w=inputNums[nums[i][3]];
            res1=compute(x,inputOps[op[j][0]],y);
            res2=compute(res1,inputOps[op[j][1]],z);
            res3=compute(res2,inputOps[op[j][2]],w);
            if (res3==24)
                    std::cout<<x<<toOperator(inputOps[op[j][0]])<<y<<toOperator(inputOps[op[j][1]])<<z<<toOperator(inputOps[op[j][2]])<<w<<std::endl;
 
        }

}

原创粉丝点击