3,4,-6,10 求24点 3种算法

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/08 14:25:31
3,4,-6,10 求24点 3种算法

3,4,-6,10 求24点 3种算法
3,4,-6,10 求24点 3种算法

3,4,-6,10 求24点 3种算法
3×(10-6+4)=24
4-(-6÷3×10)=24
4-10×(-6)÷3=24
10-4-3×(-6)=24
4种了.

6/3*10+4
3*6+10-4

#include
#include
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;...

全部展开

#include
#include
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[i]==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<<"(("< 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<<"("< 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<<"("< 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< 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< flag=1;
}

}
}
}

return flag;
}
void main()
{
int a,b,c,d;
int flag;
cout<<"输入四个整数(<=13)"< cin>>a>>b>>c>>d;
flag=process(a,b,c,d);
if(flag)
cout<<"匹配成功"< else
cout<<"匹配失败"<
}
这个程序可以算24点,不过结果好多重复,正在想办法优化

收起