前缀和是不是求错了
#include <bits/stdc++.h>
using namespace std;
int a[6],d[20];
char b[6],c[6]="+-*/";
bool vis[6];
void print(int k){
for(int i=1;i<=k-1;i++){
if(b[i]=='+'){
printf("%d+%d=%d\n",d[i],d[i+1]-d[i],d[i+1]);
}else if(b[i]=='-'){
printf("%d-%d=%d\n",d[i],d[i]-d[i+1],d[i+1]);
}else if(b[i]=='*'){
printf("%d*%d=%d\n",d[i],d[i+1]/d[i],d[i+1]);
}else if(b[i]=='/'){
printf("%d/%d=%d\n",d[i],d[i]/d[i+1],d[i+1]);
}
}
}
bool check(){
for(int i=1;i<=4;i++){
if(vis[i]==0){
return 1;
}
}
return 0;
}
void dfs(int step){
if(check()==0&&d[step-1]==24){
print(step-1);
exit(0);
}
for(int i=1;i<=4;i++){
for(int j=0;j<=3;j++){
if(vis[i]==0){
vis[i]=1;
if(c[j]=='+'){
d[step]=d[step-1]+a[i];
b[step-1]=c[j];
}else if(c[j]=='-'){
d[step]=d[step-1]-a[i];
b[step-1]=c[j];
}else if(c[j]=='/'&&d[step-1]%a[i]==0){
d[step]=d[step-1]/a[i];
b[step-1]=c[j];
}else{
d[step]=d[step-1]*a[i];
b[step-1]=c[j];
}
dfs(step+1);
vis[i]=0;
}
}
}
}
int main(){
for(int i=1;i<=4;i++){
scanf("%d",&a[i]);
}
dfs(1);
printf("No answer!");
}