#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define EXCHANGE(a,b) \
({typeof(a) _tmp; \
_tmp=a; \
a=b; \
b=_tmp;})
void permute_opt(vector<int> opt,vector<int> permlist,int index){
if(index==3){
int result;
int ERROR=0;
char save[3];
result=permlist[0];
for(int i=0;i<3;i++){
switch(opt[i]){
case 0:
result=result+permlist[i+1];
save[i]='+';
break;
case 1:
result=result-permlist[i+1];
save[i]='-';
break;
case 2:
result=result*permlist[i+1];
save[i]='*';
break;
case 3:
if(result%permlist[i+1]==0){
result=result/permlist[i+1];
save[i]='/';
}else{
ERROR=1;
}
break;
}
}
if(result==24&&ERROR==0){
cout<<"(("<<permlist[0]<< save[0] \
<<permlist[1]<<")" << save[1] \
<<permlist[2]<<")" << save[2] \
<<permlist[3]<<"=24"<<endl;
}
}else{
for(int i=0;i<4;i++){
opt[index]=i;
permute_opt(opt,permlist,index+1);
}
}
return;
}
void permute(vector<int> permlist, int index){
int i,vsize;
vector<int> opt;
opt.resize(3);
vsize=permlist.size();
if((index==vsize-1))
permute_opt(opt,permlist,0);
else{
permute(permlist,index+1);
for(i=index+1;i<vsize;i++){
EXCHANGE(permlist[i],permlist[index]);
permute(permlist,index+1);
}
}
return;
}
int main(){
int i,X;
vector<int> permlist;
for(i=0;i<4;i++){
cin>>X;
permlist.push_back(X);
}
permute(permlist,0);
return 0;
}
先生成数的排列 再生成运算符号子集
但没消除重复项,懒了