测试点十WA了
#include<bits/stdc++.h>
using namespace std;
struct node{
int number;
char s;
}p[10];
int a[70000];
void dfs(int ,int );
bool flg=false;
int main(){
for(int i=1;i<=4;i++)
{
int x;
scanf("%d",&x);
a[x]++;
}
dfs(24,1);
if(flg==false)
printf("No answer!");
return 0;
}
void dfs(int x,int id)
{
if(id==4)
{
if(a[x]>0)
{
// for(int i=1;i<=9;i++)
// {
// printf("%d %d->%d--",x,a[i],i);
// }
flg=true;
int g=x;
for(int i=3;i>0;i--)
{
if(p[i].s=='+')
{
printf("%d+%d=%d\n",max(g,p[i].number),min(g,p[i].number),(g+p[i].number));
g=g+p[i].number;
}
else if(p[i].s=='-')
{
printf("%d-%d=%d\n",max(g,p[i].number),min(g,p[i].number),(g-p[i].number));
g=g-p[i].number;
}
else if(p[i].s=='/')
{
printf("%d/%d=%d\n",g,p[i].number,(g/p[i].number));
g=g/p[i].number;
}
else if(p[i].s=='*')
{
printf("%d*%d=%d\n",max(g,p[i].number),min(g,p[i].number),(g*p[i].number));
g=g*p[i].number;
}
}
}
return ;
}
for(int i=1;i<=4;i++)
{
for(int j=1;j<=9;j++)
{
if(a[j]>=1)
{
switch(i){
case 1:
if(x-j>0)
{
a[j]--;
p[id].number=j;
p[id].s='+';
dfs(x-j,id+1);
a[j]++;
break;
}
case 2:
a[j]--;
p[id].number=j;
p[id].s='-';
dfs(x+j,id+1);
a[j]++;
break;
case 3:
if(j!=0)
{
a[j]--;
p[id].number=j;
p[id].s='/';
dfs(x*j,id+1);
a[j]++;
}
break;
case 4:
if(j!=0&&x%j==0)
{
a[j]--;
p[id].number=j;
p[id].s='*';
dfs(x/j,id+1);
a[j]++;
}
break;
}
}
if(flg==true)
return ;
}
}
}
//+-*/