24点



#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;
}


先生成数的排列 再生成运算符号子集

但没消除重复项,懒了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值