#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[10];
bool visit[10];
struct Node{
    int x,y,res;
    char op;
}node[10];
void dfs(int deep){
//    for(int i=1;i<=4;i++) printf("%d ",num[i]);
//    printf("\n");
//    for(int i=1;i<=4;i++) printf("%d ",int(visit[i]));
//    printf("\n");
    if(deep>=4){
//        printf("1\n");
        bool flag=false;
        for(int i=1;i<=4;i++){
            if(num[i]==24){
                flag=true;
                break;
            }
        }
        if(flag){
            for(int i=1;i<=3;i++) printf("%d%c%d=%d\n",node[i].x,node[i].op,node[i].y,node[i].res);
            exit(0);
        }
        return ;
    }
    for(int i=1;i<=4;i++){
        for(int j=1;j<=4;j++){
            if(i==j||visit[i]||visit[j]||num[i]<num[j]||num[i]==0||num[j]==0) continue;
            for(int op=1;op<=4;op++){
                node[deep].x=num[i],node[deep].y=num[j];
//                printf("i:%d j:%d deep:%d\n",i,j,deep);
                switch(op){
                    case 1:num[i]=num[i]+num[j],visit[j]=true,node[deep].op='+',node[deep].res=num[i];dfs(deep+1);visit[j]=false,num[i]=num[i]-num[j];break;
                    case 2:num[i]=num[i]-num[j],visit[j]=true,node[deep].op='-',node[deep].res=num[i];dfs(deep+1);visit[j]=false,num[i]=num[i]+num[j];break;
                    case 3:num[i]=num[i]*num[j],visit[j]=true,node[deep].op='*',node[deep].res=num[i];dfs(deep+1);visit[j]=false,num[i]=num[i]/num[j];break;
                    case 4:if(num[i]%num[j]==0){num[i]=num[i]/num[j],visit[j]=true,node[deep].op='/',node[deep].res=num[i];dfs(deep+1);visit[j]=false,num[i]=num[i]*num[j];}break;
                }
            }
        }
    }
}
int main(){
//    freopen("Poker.in","r",stdin);
//    freopen("Poker.out","w",stdout); 
    scanf("%d %d %d %d",&num[1],&num[2],&num[3],&num[4]);
    dfs(1);
    printf("No answer!");
    return 0;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐