#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;}
先生成数的排列 再生成运算符号子集
但没消除重复项,懒了