|
这题目网络上多的是,我就不做了。呵呵
摘抄人家的算法代码:
#include <iostream>
#include <math.h>
using namespace std;
const int N=24;
int comp(int a,int b,int c,int d)
{
int m[4]={a,b,c,d};
int i,j;
int flag=0;
for(i=0;i<4;i++)
for(j=i+1;j<4;j++)
{
if(m==m[j])
flag=1;
}
return flag;
}
float oper(int o,float m,float n)
{
float t=3000;
if(o==0) t=m+n;
if(o==1) t=m-n;
if(o==2) t=m*n;
if(o==3&&n) t=m/n;
return t;
}
int process(int a,int b,int c,int d)
{
int m[4]={a,b,c,d};
int flag=0;
int i,j,k;
int i1,i2,i3,i4;
char op[4]={'+','-','*','/'};
float t1,t2,t3;
for(i1=0;i1<4;i1++)
for(i2=0;i2<4;i2++)
for(i3=0;i3<4;i3++)
for(i4=0;i4<4;i4++)
{
if(!comp(i1,i2,i3,i4))
{
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
{
t1=oper(k,m[i1],m[i2]);
t2=oper(j,t1,m[i3]);
t3=oper(i,t2,m[i4]);
if(fabs(t3-N)==0)
{
//if(abs(i-j)%2&&abs(j-k)%2)
cout<<"(("<<m[i1]<<op[k]<<m[i2]<<")"<<op[j]<<m[i3]<<")"<<op<<m[i4]<<endl;
flag=1;
}
t1=oper(k,m[i1],m[i2]);
t2=oper(j,m[i3],m[i4]);
t3=oper(i,t1,t2);
if(fabs(t3-N)==0)
{
cout<<"("<<m[i1]<<op[k]<<m[i2]<<")"<<op<<"("<<m[i3]<<op[j]<<m[i4]<<")"<<endl;
flag=1;
}
t1=oper(k,m[i2],m[i3]);
t2=oper(j,m[i1],t1);
t3=oper(i,t2,m[i4]);
if(fabs(t3-N)==0)
{
cout<<"("<<m[i1]<<op[j]<<"("<<m[i2]<<op[k]<<m[i3]<<"))"<<op<<m[i4]<<endl;
flag=1;
}
t1=oper(k,m[i2],m[i3]);
t2=oper(j,t1,m[i4]);
t3=oper(i,m[i1],t2);
if(fabs(t3-N)==0)
{
cout<<m[i1]<<op<<"(("<<m[i2]<<op[k]<<m[i3]<<")"<<op[j]<<m[i4]<<")"<<endl;
flag=1;
}
t1=oper(k,m[i3],m[i4]);
t2=oper(j,m[i2],t1);
t3=oper(i,m[i1],t2);
if(fabs(t3-N)==0)
{
cout<<m[i1]<<op<<"("<<m[i2]<<op[j]<<"("<<m[i3]<<op[k]<<m[i4]<<"))"<<endl;
flag=1;
}
}
}
}
return flag;
}
void main()
{
int a,b,c,d;
int flag;
cout<<"输入四个整数(<=13)"<<endl;
cin>>a>>b>>c>>d;
flag=process(a,b,c,d);
if(flag)
cout<<"匹配成功"<<endl;
else
cout<<"匹配失败"<<endl;
} |
|