📄 24dlgdlg.cpp
字号:
iNumMaths[6][1]=eNumber;
for (int oneOP = eAdd; oneOP <= eDiv; oneOP++)
{
for (int twoOP=eAdd; twoOP<=eDiv; twoOP++)
{
for (int threeOP=eAdd; threeOP<=eDiv; threeOP++)
{
iNumMaths[1][0] = oneOP;
iNumMaths[1][1] = eOperator;
iNumMaths[3][0] = twoOP;
iNumMaths[3][1] = eOperator;
iNumMaths[5][0] = threeOP;
iNumMaths[5][1] = eOperator;
double dRes = CalcOneExpress(iNumMaths, 7);
if(Equal24(dRes))
{
CombineResult(iNumMaths, 7, strResult);
return TRUE;
}
}
}
}//end for (int oneOP
}
}
}
}
return FALSE;
}
int iNumExp = 0;
//计算有括号的
BOOL CalcArray2(int iNumInput[], CString& strResult)
{
// (a * b) * c * d //9 number
iNumExp = 9;
int iNumMaths[11][2];
iNumMaths[0][0] = eLeftParen;
iNumMaths[0][1] = eOperator;
iNumMaths[4][0] = eRightParen;
iNumMaths[4][1] = eOperator;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==i)
{
continue;
}
for(int k=0;k<4;k++)
{
if(k==i||k==j)
{
continue;
}
for(int l=0;l<4;l++)
{
if(l==i||l==j||l==k)
{
continue;
}
iNumMaths[1][0]=iNumInput[i];
iNumMaths[3][0]=iNumInput[j];
iNumMaths[6][0]=iNumInput[k];
iNumMaths[8][0]=iNumInput[l];
iNumMaths[1][1]=eNumber;
iNumMaths[3][1]=eNumber;
iNumMaths[6][1]=eNumber;
iNumMaths[8][1]=eNumber;
for (int oneOP = eAdd; oneOP <= eDiv; oneOP++)
{
for (int twoOP=eAdd; twoOP<=eDiv; twoOP++)
{
for (int threeOP=eAdd; threeOP<=eDiv; threeOP++)
{
iNumMaths[2][0] = oneOP;
iNumMaths[2][1] = eOperator;
iNumMaths[5][0] = twoOP;
iNumMaths[5][1] = eOperator;
iNumMaths[7][0] = threeOP;
iNumMaths[7][1] = eOperator;
double dRes = CalcOneExpress(iNumMaths, iNumExp);
if(Equal24(dRes))
{
CombineResult(iNumMaths, iNumExp, strResult);
return TRUE;
}
}
}
}//end for (int oneOP
}
}
}
}
return FALSE;
}
//计算有括号的
BOOL CalcArray3(int iNumInput[], CString& strResult)
{
// (a * b * c) * d //9 number
int iNumMaths[11][2];
iNumMaths[0][0] = eLeftParen;
iNumMaths[0][1] = eOperator;
iNumMaths[6][0] = eRightParen;
iNumMaths[6][1] = eOperator;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==i)
{
continue;
}
for(int k=0;k<4;k++)
{
if(k==i||k==j)
{
continue;
}
for(int l=0;l<4;l++)
{
if(l==i||l==j||l==k)
{
continue;
}
iNumMaths[1][0]=iNumInput[i];
iNumMaths[3][0]=iNumInput[j];
iNumMaths[5][0]=iNumInput[k];
iNumMaths[8][0]=iNumInput[l];
iNumMaths[1][1]=eNumber;
iNumMaths[3][1]=eNumber;
iNumMaths[5][1]=eNumber;
iNumMaths[8][1]=eNumber;
for (int oneOP = eAdd; oneOP <= eDiv; oneOP++)
{
for (int twoOP=eAdd; twoOP<=eDiv; twoOP++)
{
for (int threeOP=eAdd; threeOP<=eDiv; threeOP++)
{
iNumMaths[2][0] = oneOP;
iNumMaths[2][1] = eOperator;
iNumMaths[4][0] = twoOP;
iNumMaths[4][1] = eOperator;
iNumMaths[7][0] = threeOP;
iNumMaths[7][1] = eOperator;
double dRes = CalcOneExpress(iNumMaths, 9);
if(Equal24(dRes))
{
CombineResult(iNumMaths, 9, strResult);
return TRUE;
}
}
}
}//end for (int oneOP
}
}
}
}
return FALSE;
}
//计算有括号的
BOOL CalcArray4(int iNumInput[], CString& strResult)
{
// a * (b * c) * d //9 number
int iNumMaths[11][2];
iNumMaths[2][0] = eLeftParen;
iNumMaths[2][1] = eOperator;
iNumMaths[6][0] = eRightParen;
iNumMaths[6][1] = eOperator;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==i)
{
continue;
}
for(int k=0;k<4;k++)
{
if(k==i||k==j)
{
continue;
}
for(int l=0;l<4;l++)
{
if(l==i||l==j||l==k)
{
continue;
}
iNumMaths[0][0]=iNumInput[i];
iNumMaths[3][0]=iNumInput[j];
iNumMaths[5][0]=iNumInput[k];
iNumMaths[8][0]=iNumInput[l];
iNumMaths[0][1]=eNumber;
iNumMaths[3][1]=eNumber;
iNumMaths[5][1]=eNumber;
iNumMaths[8][1]=eNumber;
for (int oneOP = eAdd; oneOP <= eDiv; oneOP++)
{
for (int twoOP=eAdd; twoOP<=eDiv; twoOP++)
{
for (int threeOP=eAdd; threeOP<=eDiv; threeOP++)
{
iNumMaths[1][0] = oneOP;
iNumMaths[1][1] = eOperator;
iNumMaths[4][0] = twoOP;
iNumMaths[4][1] = eOperator;
iNumMaths[7][0] = threeOP;
iNumMaths[7][1] = eOperator;
double dRes = CalcOneExpress(iNumMaths, 9);
if(Equal24(dRes))
{
CombineResult(iNumMaths, 9, strResult);
return TRUE;
}
}
}
}//end for (int oneOP
}
}
}
}
return FALSE;
}
//计算有括号的
BOOL CalcArray5(int iNumInput[], CString& strResult)
{
// (a * b) * (c * d) //11 number
int iNumMaths[11][2];
iNumMaths[0][0] = eLeftParen;
iNumMaths[0][1] = eOperator;
iNumMaths[4][0] = eRightParen;
iNumMaths[4][1] = eOperator;
iNumMaths[6][0] = eLeftParen;
iNumMaths[6][1] = eOperator;
iNumMaths[10][0] = eRightParen;
iNumMaths[10][1] = eOperator;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==i)
{
continue;
}
for(int k=0;k<4;k++)
{
if(k==i||k==j)
{
continue;
}
for(int l=0;l<4;l++)
{
if(l==i||l==j||l==k)
{
continue;
}
iNumMaths[1][0]=iNumInput[i];
iNumMaths[3][0]=iNumInput[j];
iNumMaths[7][0]=iNumInput[k];
iNumMaths[9][0]=iNumInput[l];
iNumMaths[1][1]=eNumber;
iNumMaths[3][1]=eNumber;
iNumMaths[7][1]=eNumber;
iNumMaths[9][1]=eNumber;
for (int oneOP = eAdd; oneOP <= eDiv; oneOP++)
{
for (int twoOP=eAdd; twoOP<=eDiv; twoOP++)
{
for (int threeOP=eAdd; threeOP<=eDiv; threeOP++)
{
iNumMaths[2][0] = oneOP;
iNumMaths[2][1] = eOperator;
iNumMaths[5][0] = twoOP;
iNumMaths[5][1] = eOperator;
iNumMaths[8][0] = threeOP;
iNumMaths[8][1] = eOperator;
double dRes = CalcOneExpress(iNumMaths, 11);
if(Equal24(dRes))
{
CombineResult(iNumMaths, 11, strResult);
return TRUE;
}
}
}
}//end for (int oneOP
}
}
}
}
return FALSE;
}
//计算有括号的
BOOL CalcArray6(int iNumInput[], CString& strResult)
{
// ((a * b) * c) * d //11 number
int iNumMaths[11][2];
iNumMaths[0][0] = eLeftParen;
iNumMaths[0][1] = eOperator;
iNumMaths[1][0] = eLeftParen;
iNumMaths[1][1] = eOperator;
iNumMaths[5][0] = eRightParen;
iNumMaths[5][1] = eOperator;
iNumMaths[8][0] = eRightParen;
iNumMaths[8][1] = eOperator;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==i)
{
continue;
}
for(int k=0;k<4;k++)
{
if(k==i||k==j)
{
continue;
}
for(int l=0;l<4;l++)
{
if(l==i||l==j||l==k)
{
continue;
}
iNumMaths[2][0]=iNumInput[i];
iNumMaths[4][0]=iNumInput[j];
iNumMaths[7][0]=iNumInput[k];
iNumMaths[10][0]=iNumInput[l];
iNumMaths[2][1]=eNumber;
iNumMaths[4][1]=eNumber;
iNumMaths[7][1]=eNumber;
iNumMaths[10][1]=eNumber;
for (int oneOP = eAdd; oneOP <= eDiv; oneOP++)
{
for (int twoOP=eAdd; twoOP<=eDiv; twoOP++)
{
for (int threeOP=eAdd; threeOP<=eDiv; threeOP++)
{
iNumMaths[3][0] = oneOP;
iNumMaths[3][1] = eOperator;
iNumMaths[6][0] = twoOP;
iNumMaths[6][1] = eOperator;
iNumMaths[9][0] = threeOP;
iNumMaths[9][1] = eOperator;
double dRes = CalcOneExpress(iNumMaths, 11);
if(Equal24(dRes))
{
CombineResult(iNumMaths, 11, strResult);
return TRUE;
}
}
}
}//end for (int oneOP
}
}
}
}
return FALSE;
}
//计算有括号的
BOOL CalcArray7(int iNumInput[], CString& strResult)
{
// (a * (b * c)) * d //11 number
int iNumMaths[11][2];
iNumMaths[0][0] = eLeftParen;
iNumMaths[0][1] = eOperator;
iNumMaths[3][0] = eLeftParen;
iNumMaths[3][1] = eOperator;
iNumMaths[7][0] = eRightParen;
iNumMaths[7][1] = eOperator;
iNumMaths[8][0] = eRightParen;
iNumMaths[8][1] = eOperator;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==i)
{
continue;
}
for(int k=0;k<4;k++)
{
if(k==i||k==j)
{
continue;
}
for(int l=0;l<4;l++)
{
if(l==i||l==j||l==k)
{
continue;
}
iNumMaths[1][0]=iNumInput[i];
iNumMaths[4][0]=iNumInput[j];
iNumMaths[6][0]=iNumInput[k];
iNumMaths[10][0]=iNumInput[l];
iNumMaths[1][1]=eNumber;
iNumMaths[4][1]=eNumber;
iNumMaths[6][1]=eNumber;
iNumMaths[10][1]=eNumber;
for (int oneOP = eAdd; oneOP <= eDiv; oneOP++)
{
for (int twoOP=eAdd; twoOP<=eDiv; twoOP++)
{
for (int threeOP=eAdd; threeOP<=eDiv; threeOP++)
{
iNumMaths[2][0] = oneOP;
iNumMaths[2][1] = eOperator;
iNumMaths[5][0] = twoOP;
iNumMaths[5][1] = eOperator;
iNumMaths[9][0] = threeOP;
iNumMaths[9][1] = eOperator;
double dRes = CalcOneExpress(iNumMaths, 11);
if(Equal24(dRes))
{
CombineResult(iNumMaths, 11, strResult);
return TRUE;
}
}
}
}//end for (int oneOP
}
}
}
}
return FALSE;
}
//Calculate 24 points
BOOL Calc24(int iNum1, int iNum2, int iNum3, int iNum4, CString& strResult)
{
//括号的几种情况
//1 无括号
//2 (a b) c d 同a b (c d), 下省略
//3 (a b c) d
//4 a (b c) d
//5 (a b) (c d)
//6 ((a b) c) d
//7 (a (b c)) d
//计算不含括号的情况
int iNumArr[4];
iNumArr[0] = iNum1;
iNumArr[1] = iNum2;
iNumArr[2] = iNum3;
iNumArr[3] = iNum4;
if (CalcArray1(iNumArr, strResult))
{
return TRUE;
}
if (CalcArray2(iNumArr, strResult))
{
return TRUE;
}
if (CalcArray3(iNumArr, strResult))
{
return TRUE;
}
if (CalcArray4(iNumArr, strResult))
{
return TRUE;
}
if (CalcArray5(iNumArr, strResult))
{
return TRUE;
}
if (CalcArray6(iNumArr, strResult))
{
return TRUE;
}
if (CalcArray7(iNumArr, strResult))
{
return TRUE;
}
return FALSE;
}
void CMy24DlgDlg::OnButton2()
{
UpdateData();
if(!Calc24(m_iNum1, m_iNum2, m_iNum3, m_iNum4, m_strResult))
{
m_strResult = "These number cannot be combined to 24";
}
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -