📄 24 dot.cpp
字号:
//****************************************************************************************
// 24点.cpp : Defines the entry point for the console application.
//written by 束文辉 031251096
//*****************************************************************************************
#include "stdafx.h"
#include <iostream>
using namespace std;
//*****************************************************************************************
void printhead();
void calculate(float,float,float,float);//((A#B)#C)#D
void calculate2(float,float,float,float);//(A#B)#(C#D)
void set(float,float,float,float);
void set2(float,float,float,float);
void printend();
int opr[3]={0,0,0};
float res1,res2,res3;
bool sign1,sign2,sign3;
bool find=false;
bool nsame=true;
bool goon=true;
int y[200][3];//judge the same
int y2[200][3];
int num[200][4];
int z=-1;
char opr1[3];
float a[4];
//*************************************************************************************
void change(float& x,float& y)//change two numbers when print out
{ int m=x;
x=y;
y=m;
}
//****************************************************************************************
int main(int argc, char* argv[])
{ cout<<"************* now caculate 24:*************"<<endl;
while(goon)
{ for(int u=0;u<200;u++)
{ for(int v=0;v<3;v++)
y[u][v]=100;
}
printhead();
cout<<"result: "<<endl;
set(a[0],a[1],a[2],a[3]);
z=-1;
set2(a[0],a[1],a[2],a[3]);
if(!find)
cout<<"There is no result..."<<endl;
printend();
}
return 0;
}
//******************************************************************************************
void printhead()
{ float x;
cout<<"please enter 4 numbers:"<<endl;
for(int i=0;i<4;i++)
{
cin>>x;
a[i]=x;
}
if(x<0||x>13)//illegal input
{ cout<<"illegal number(out of range)..."<<endl;
}
}
//******************************************************************************************
void calculate(float a,float b,float c,float d)//calculate and judge and print
{ for(opr[0]=0;opr[0]<6;opr[0]++)
{ switch(opr[0])
{
case 0: res1=a+b;
break;
case 1: res1=a-b;
break;
case 2: res1=a*b;
break;
case 3: if(b==0)
res1=100000;
else res1=a/b;
break;
case 4: res1=b-a;
break;
case 5: if(a==0)
res1=100000;
else res1=b/a;
break;
}
for(opr[1]=0;opr[1]<6;opr[1]++)
{ switch(opr[1])
{
case 0: res2=res1+c;
break;
case 1: res2=res1-c;
break;
case 2: res2=res1*c;
break;
case 3:if(c==0)
res2=1000;
else res2=res1/c;
break;
case 4: res2=c-res1;
break;
case 5: if(res1==0)
res2=10000;
else res2=c/res1;
break;
}
for(opr[2]=0;opr[2]<6;opr[2]++)
{ switch(opr[2])
{
case 0: res3=res2+d;
break;
case 1: res3=res2-d;
break;
case 2: res3=res2*d;
break;
case 3:if(d==0)
res3=1000;
else res3=res2/d;
break;
case 4: res3=d-res2;
break;
case 5:if(res2==0)
res3=10000;
else res3=d/res2;
break;
}
//begin to judge
nsame=true;
if(res3-24>-0.0001&&res3-24<0.0001)
{ find=true;
z++;
y[z][0]=opr[0];
y[z][1]=opr[1];
y[z][2]=opr[2];
num[z][0]=a;
num[z][1]=b;
num[z][2]=c;
num[z][3]=d;
for(int flg=0;flg<3;flg++)
{if(y[z][flg]==5)
y[z][flg]=3;
if(y[z][flg]==4)
y[z][flg]=1;
}
for(int jud=0;jud<z;jud++)
{ if(y[z][0]==y[jud][1]&&y[z][1]==y[jud][0]&&num[z][1]==num[jud][2]&&num[z][2]==num[jud][1])
nsame=false;
if(y[z][1]==y[jud][2]&&y[z][2]==y[jud][1]&&num[z][2]==num[jud][3]&&num[z][3]==num[jud][2])
nsame=false;
if(y[z][0]==y[jud][2]&&y[z][2]==y[jud][0]&&num[z][3]==num[jud][1]&&num[z][1]==num[jud][3])
nsame=false;
if(y[z][0]==y[jud][0]&&y[z][1]==y[jud][1]&&y[z][2]==y[jud][2])
nsame=false;
}
if(nsame)
{/*cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;//(used for debug)
cout<<res1<<endl;
cout<<res2<<endl;
cout<<res3<<endl;
cout<<opr[0]<<endl;
cout<<opr[1]<<endl;
cout<<opr[2]<<endl;*/
for(int t=0;t<3;t++)
{
switch(opr[t])
{ case 0: opr1[t]='+';
break;
case 1: opr1[t]='-';
break;
case 2: opr1[t]='*';
break;
case 3: opr1[t]='/';
break;
case 4: opr1[t]='-';
break;
case 5: opr1[t]='/';
break;
}
}
if(opr[0]>=4)
{ change(a,b);
sign1=true;
}
if(opr[1]>=4)
{ sign2=true;
change(b,c);
change(a,b);
}
if(opr[2]>=4)
{change(c,d);
change(b,c);
change(a,b);
sign3=true;
}
// cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
//begin to print
if(a==b&&b==c&&c==d)
cout<<a<<opr1[0]<<b<<opr1[1]<<c<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<2&&opr[1]>1&&opr[2]>1&&opr[1]<4&&opr[2]<4)
cout<<'('<<a<<opr1[0]<<b<<')'<<opr1[1]<<c<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<2&&opr[1]<2&&opr[2]>1&&opr[2]<4)
cout<<'('<<a<<opr1[0]<<b<<opr1[1]<<c<<')'<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<2&&opr[1]<2&&opr[2]<2)
cout<<a<<opr1[0]<<b<<opr1[1]<<c<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]>1&&opr[1]>1&&opr[2]>1&&opr[0]<4&&opr[1]<4&&opr[2]<4)
cout<<a<<opr1[0]<<b<<opr1[1]<<c<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]>1&&opr[1]<2&&opr[2]<2&&opr[0]<4)
cout<<a<<opr1[0]<<b<<opr1[1]<<c<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]>1&&opr[1]>1&&opr[2]<2&&opr[0]<4&&opr[1]<4)
cout<<a<<opr1[0]<<b<<opr1[1]<<c<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<2&&opr[1]<2&&opr[2]>1&&opr[2]<4)
cout<<'('<<a<<opr1[0]<<b<<opr1[1]<<c<<')'<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<2&&opr[1]>1&&opr[2]<2&&opr[1]<4)
cout<<'('<<'('<<a<<opr1[0]<<b<<')'<<opr1[1]<<c<<')'<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<4&&opr[1]>3&&opr[2]<4)
cout<<'('<<a<<opr1[1]<<'('<<b<<opr1[0]<<c<<')'<<')'<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]>3&&opr[1]<4&&opr[2]>3)
cout<<a<<opr1[2]<<'('<<'('<<b<<opr1[0]<<c<<')'<<opr1[1]<<d<<')'<<"=24"<<endl;
else if(opr[0]>3&&opr[1]>3&&opr[2]>3)
cout<<a<<opr1[0]<<'('<<b<<opr1[1]<<'('<<c<<opr1[2]<<d<<')'<<')'<<"=24"<<endl;
else if(opr[0]>3&&opr[1]>3&&opr[2]<4)
cout<<'('<<a<<opr1[1]<<'('<<b<<opr1[0]<<c<<')'<<')'<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<4&&opr[1]<2&&opr[2]<4)
cout<<'('<<a<<opr1[0]<<b<<opr1[1]<<c<<')'<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<4&&opr[1]<4&&opr[2]>3)
cout<<a<<opr1[2]<<'('<<'('<<b<<opr1[0]<<c<<')'<<opr1[1]<<d<<')'<<"=24"<<endl;
else if(opr[0]>3&&opr[1]<4&&opr[2]<4)
cout<<'('<<'('<<a<<opr1[0]<<b<<')'<<opr1[1]<<c<<')'<<opr1[2]<<d<<"=24"<<endl;
else if(opr[0]<3&&opr[1]>4&&opr[2]>4)
cout<<a<<opr1[2]<<'('<<b<<opr1[1]<<'('<<c<<opr1[0]<<d<<')'<<')'<<"=24"<<endl;
else if(opr[0]==3&&opr[1]==4&&opr[2]==5&&opr[0]>1)
cout<<a<<opr1[2]<<'('<<b<<opr1[1]<<c<<opr1[0]<<d<<')'<<"=24"<<endl;
else if(opr[0]<4&&opr[1]>3&&opr[2]>3&&opr[0]<2)
cout<<a<<opr1[2]<<'('<<b<<opr1[1]<<'('<<c<<opr1[0]<<d<<')'<<')'<<"=24"<<endl;
if(sign1)
{change(a,b);
sign1=false;}
if(sign2)
{change(b,a);change(c,b);
sign2=false;}
if(sign3)
{change(a,b);change(b,c);change(c,d);
sign3=false;}
}
}
}
}
}
}
//********************************************************************************************
void set(float a,float b,float c,float d)//for different situation
{ if(a==b&&b==c&&c==d)
calculate(a,b,c,d);
if(a!=b&&b!=c&&c!=d)
{calculate(a,b,c,d);
calculate(a,b,d,c);
calculate(b,c,a,d);
calculate(b,c,d,a);
calculate(c,d,a,b);
calculate(c,d,b,a);
}
if(a==b&&b==c&&c!=d)
{calculate(a,b,c,d);
calculate(a,b,d,c);
calculate(a,d,b,c);
}
if(a==b&&b==d&&c!=b)
{calculate(a,b,c,d);
calculate(a,c,b,d);
calculate(a,b,d,c);
}
if(a==c&&c==d&&c!=b)
{calculate(a,b,c,d);
calculate(a,c,b,d);
calculate(a,c,d,b);
}
if(b==c&&c==d&&a!=b)
{calculate(a,b,c,d);
calculate(b,c,d,a);
calculate(c,b,a,d);
}
if(a==b&&c==d&&b!=c)
{calculate(a,b,c,d);
calculate(a,c,b,d);
calculate(d,c,b,a);
calculate(a,c,d,b);
}
if(a==c&&b==d&&c!=b)
{calculate(a,b,c,d);
calculate(a,c,b,d);
calculate(b,d,a,c);
calculate(a,b,d,c);
}
if(a==d&&b==c&&c!=d)
{calculate(a,b,c,d);
calculate(a,b,d,c);
calculate(c,b,a,d);
calculate(a,d,c,b);
}
}
//****************************************************************************************
void calculate2(float a,float b,float c,float d)
{ float e1(0),e2(0),e3(0);
for(opr[0]=0;opr[0]<6;opr[0]++)
{ switch(opr[0])
{
case 0: e1=a+b;
break;
case 1: e1=a-b;
break;
case 2: e1=a*b;
break;
case 3:if(b==0)
e1=100000;
else e1=a/b;
break;
case 4: e1=b-a;
break;
case 5:if(a==0)
e1=100000;
else e1=b/a;
break;
}
for(opr[1]=0;opr[1]<6;opr[1]++)
{ switch(opr[1])
{
case 0: e2=c+d;
break;
case 1: e2=c-d;
break;
case 2: e2=c*d;
break;
case 3:if(d==0)
e2=100000;
else e2=c/d;
break;
case 4: e2=d-c;
break;
case 5:if(c==0)
e2=100000;
else e2=d/c;
break;
}
for(opr[2]=0;opr[2]<6;opr[2]++)
{ switch(opr[2])
{
case 0: e3=e1+e2;
break;
case 1: e3=e1-e2;
break;
case 2: e3=e1*e2;
break;
case 3:if(e2==0)
e3=100000;
else e3=e1/e2;
break;
case 4: e3=e2-e1;
break;
case 5:if(e1==0)
e3=100000;
else e3=e2/e1;
break;
}
nsame=true;
if(e3-24>-0.0001&&e3-24<0.0001)
{ /*cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;//(used for debug)
cout<<e1<<endl;
cout<<e2<<endl;
cout<<e3<<endl;
cout<<opr[0]<<endl;
cout<<opr[1]<<endl;
cout<<opr[2]<<endl;*/
find=true;
z++;
y2[z][0]=opr[0];
y2[z][1]=opr[1];
y2[z][2]=opr[2];
for(int flg=0;flg<3;flg++)
{if(y2[z][flg]==5)
y2[z][flg]=3;
if(y2[z][flg]==4)
y2[z][flg]=1;
}
for(int jud=0;jud<z;jud++)
{if(y2[z][0]==y2[jud][0]&&y2[z][1]==y2[jud][1]&&y2[z][2]==y2[jud][2])
nsame=false;
}
for(int t=0;t<3;t++)
{
switch(opr[t])
{ case 0: opr1[t]='+';
break;
case 1: opr1[t]='-';
break;
case 2: opr1[t]='*';
break;
case 3: opr1[t]='/';
break;
case 4: opr1[t]='-';
break;
case 5: opr1[t]='/';
break;
}
}
if(opr[0]>=4)
{ change(a,b);
sign1=true;
}
if(opr[1]>=4)
{change(c,d);
sign3=true;
}
if(opr[2]>=4)
{ sign2=true;
change(a,c);
change(b,d);
}
if(nsame)
{if(opr[0]==0||opr[0]==1||opr[0]==4)
{if(opr[1]==0||opr[1]==1||opr[1]==4)
{if(opr[2]==2||opr[2]==3||opr[2]==5)
cout<<'('<<a<<opr1[0]<<b<<')'<<opr1[2]<<'('<<c<<opr1[1]<<d<<')'<<"=24"<<endl;
}
}
if(opr[0]==3||opr[0]==2||opr[0]==5)
{if(opr[1]==3||opr[1]==2||opr[1]==5)
{if(opr[2]==0||opr[2]==1||opr[2]==4)
cout<<'('<<a<<opr1[0]<<b<<')'<<opr1[2]<<'('<<c<<opr1[1]<<d<<')'<<"=24"<<endl;
}
}
}
if(sign1)
{change(a,b);
sign1=false;}
if(sign3)
{change(c,d);
sign3=false;
}
if(sign2)
{change(a,c);change(b,d);
sign2=false;}
}
}
}
}
}
//******************************************************************************************void set(int a,int b,int c,int d)
void set2(float a,float b,float c,float d)
{
if(a==b&&b==c&&c==d)
calculate2(a,b,c,d);
if(a!=b&&b!=c&&c!=d)
{calculate2(a,b,c,d);
calculate2(b,c,a,d);
calculate2(a,c,b,d);
}
if(a==b&&b==c&&c!=d)
{calculate2(a,b,c,d);
calculate2(a,d,b,c);
}
if(a==b&&b==d&&c!=b)
{calculate2(a,c,b,d);
calculate2(a,b,d,c);
}
if(a==c&&c==d&&c!=b)
{calculate2(a,b,c,d);
calculate2(a,c,d,b);
}
if(b==c&&c==d&&a!=b)
{calculate2(a,b,c,d);
calculate2(b,c,d,a);
}
if(a==b&&c==d&&b!=c)
{calculate2(a,b,c,d);
calculate2(a,c,b,d);
}
if(a==c&&b==d&&c!=b)
{calculate2(a,b,c,d);
calculate2(a,c,b,d);
}
}
//*****************************************************************************************
void printend()
{ cout<<"Do you want to go on(y/n)?"<<endl;
char go;
cin>>go;
if(go=='n'||go=='N')
goon=false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -