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

📄 expression.cpp

📁 24点游戏,用c++实现
💻 CPP
字号:
// Expression.cpp: implementation of the CExpression class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "24Dian.h"
#include "Expression.h"
#include "calculate.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CExpression::CExpression()
{

}
CExpression::CExpression(double dNum1, double dNum2, double dNum3, double dNum4,double dResult)
{
	m_dNum[0]=dNum1;
	m_dNum[1]=dNum2;
	m_dNum[2]=dNum3;
	m_dNum[3]=dNum4;
	m_dResult=dResult;
	m_strExpression="";//表达式
}

CExpression::~CExpression()
{

}

//扫描数字
//在输入的四个数字中选择,进行更换
BOOL CExpression::ScanNum()
{
	BOOL bExit=FALSE;
	double nNum[4];
	for(int n1=0; n1<4; n1++)
	{
		nNum[0]=m_dNum[n1];
		for(int n2=0; n2<4; n2++)
		{
			if(n2==n1) //如果相同,则不用加进去
				continue;
			nNum[1]=m_dNum[n2];
			for(int n3=0; n3<4; n3++)
			{
				if(n3==n1 || n3==n2)//与前面的比较,是否相同,如果同,则不加进去
					continue;
				nNum[2]=m_dNum[n3];
				for(int n4=0; n4<4; n4++)
				{
					if(n4==n1 || n4==n2 || n4==n3)//与前面的三个比较,是否相同
						continue;
					nNum[3]=m_dNum[n4];
					m_strElement[1].Format("%.0f",nNum[0]);
					m_strElement[4].Format("%.0f",nNum[1]);
					m_strElement[8].Format("%.0f",nNum[2]);
					m_strElement[11].Format("%.0f",nNum[3]);
					if(ScanOperator()) //判断括号是否正确
						bExit=TRUE;

				}
			}
		}
	}
	return bExit;
}

//扫描操作符
BOOL CExpression::ScanOperator()
{
	BOOL bExit=FALSE;
	char constOp[5];
	constOp[0] = '+';
	constOp[1] = '-';
	constOp[2] = '*';
	constOp[3] = '/';
	constOp[4] = '^';

	//////////////////////////////////////////////////////////

    //一共有5*5*5种可能,三个地方可以放括号
	//////////////////////////////////////////////////////////
	
	char Op[4];
	for(int n1=0; n1<5; n1++)
	{
		Op[0]=constOp[n1];
		for(int n2=0; n2<5; n2++)
		{
			Op[1]=constOp[n2];
			for(int n3=0; n3<5; n3++)
			{
				Op[2]=constOp[n3];
				m_strElement[2].Format("%c",Op[0]);
				m_strElement[6].Format("%c",Op[1]);
				m_strElement[10].Format("%c",Op[2]);
				if(ScanBracket())//判断括号是否正确的
					bExit=TRUE;
			}
		}
	}
	return bExit;
}

//扫描括号包括各种可能
BOOL CExpression::ScanBracket()
{	

	BOOL bExist=FALSE;

	//初始化括号
	InitBracket();
///////////////////////////////////////////
	if(IsRight())//判断是否表达式是否正确
		return bExist=TRUE;

	m_strElement[7]="(";
	m_strElement[12]=")";
	if(IsRight())
		return bExist=TRUE;

	InitBracket();
//////////////////////////////////
	m_strElement[0]="(";
	m_strElement[5]=")";
	if(IsRight())
		return bExist=TRUE;
	
	m_strElement[7]="(";
	m_strElement[12]=")";
	if(IsRight())//判断结果是否正确
		return bExist=TRUE;
/////////////////////////////////////
	InitBracket();
	m_strElement[0]="(";
	m_strElement[9]=")";
	if(IsRight())
		return bExist=TRUE;
/////////////////////////////////////
	InitBracket();
	m_strElement[3]="(";
	m_strElement[9]=")";
	if(IsRight())
		return bExist=TRUE;
//////////////////////////////////
	InitBracket();
	m_strElement[3]="(";
	m_strElement[12]=")";
	if(IsRight())
		return bExist=TRUE;

	

	return bExist;
}


//得到表达式
CString CExpression::GetExpression()
{
	return m_strExpression;
}

//判断与24比较是否正确
BOOL CExpression::IsRight()
{	
//	m_strExpression="";
	CString strTmp;
	strTmp="";
	for(int i=0; i<13; i++)
	{
		if(m_strElement[i]!=" " || !strTmp.IsEmpty())
			strTmp+=m_strElement[i];
	}
//	strTmp+="\r\n";
	CCalculate cal(strTmp);
//	TRACE(strTmp+"\n");
	if(!cal.IsValid()) 
		return FALSE;
   //得到结果
	double dResult=cal.GetResult();
	if(dResult>= m_dResult-0.0001 && dResult<=m_dResult+0.0001)
	{
		if(m_strExpression.Find(strTmp)==-1)
		{
			CString strResult;
			m_strExpression+=strTmp;
			strResult.Format("=%.0f",m_dResult);
			m_strExpression+=strResult+"\r\n";
		}
		return TRUE;
	}
	return FALSE;

}

//初试括号
void CExpression::InitBracket()
{
	m_strElement[0]="";
	m_strElement[3]="";
	m_strElement[5]="";
	m_strElement[7]="";
	m_strElement[9]="";
	m_strElement[12]="";
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -