⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24 dot.cpp

📁 dos下算24点
💻 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 + -