您的位置:首页 > 其它

自娱自乐~经典24点游戏

2014-04-21 08:52 405 查看
首先上传界面结果:



然后附上算法代码:

void CMy24pointgameDlg::OnEnChangeEdit4()
{
// TODO:  如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO:  在此添加控件通知处理程序代码
m_WndButton.EnableWindow(TRUE);    //输入第四个数字时,计算按钮变为可按
}

void CMy24pointgameDlg::Count24PointGame(void)
{

UpdateData(TRUE);

m_iWndNum1 = m_iWndNum1 % 10;
m_iWndNum2 = m_iWndNum2 % 10;
m_iWndNum3 = m_iWndNum3 % 10;
m_iWndNum4 = m_iWndNum4 % 10;

dVec.push_back(m_iWndNum1);
dVec.push_back(m_iWndNum2);
dVec.push_back(m_iWndNum3);
dVec.push_back(m_iWndNum4);

CString temp;
temp.Format(L"%d",m_iWndNum1);
sVec.push_back(temp);
temp.Format(L"%d",m_iWndNum2);
sVec.push_back(temp);
temp.Format(L"%d",m_iWndNum3);
sVec.push_back(temp);
temp.Format(L"%d",m_iWndNum4);
sVec.push_back(temp);

if (!Search24Point(COUNT_OF_NUMBER))
{
m_WndResult += L"Fail.";
}
else
{
m_WndResult = L"";
int c = 0;
for (vector<CString>::iterator it = sResult.begin(); it != sResult.end(); it++)
{
CString temp;
temp = *it;
c++;
if (c == 3)
{
temp += "\r\n";
c = 0;
}
else
temp += "\t";
m_WndResult += temp;
}
}

dVec.clear();
sVec.clear();

m_cResult.SetSel(0,-1);
m_cResult.ReplaceSel(m_WndResult);

UpdateData(FALSE);
}

bool CMy24pointgameDlg::Search24Point(int n)
{
if (n == 1)
{
if (dVec.front() - NUMBER_TO_BE_CAL == 0)
{
CString temp;
temp = sVec.front();
temp += " = 24";
sResult.push_back(temp);
return TRUE;
}
else
return FALSE;
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n ; j++)
{
double a,b;
CString s1,s2;

a = dVec[i];            // 保存起来,在方法最后再恢复,以便继续计算
b = dVec[j];            // 保存起来,在方法最后再恢复,以便继续计算
dVec[j] = dVec[n - 1];    // 将最后一个数挪过来

s1 = sVec[i];            // 保存起来,在方法最后再恢复,以便继续计算
s2 = sVec[j];            // 保存起来,在方法最后再恢复,以便继续计算
sVec[j] = sVec[n - 1];    // 将最后一个式子挪过来j'

// 看看加法能否算出,如果能算出,返回true
sVec[i] = '(' + s1 + '+' + s2 + ')';
dVec[i] = a + b;
if (Search24Point(n -1))
{
return TRUE;
}

// 看看减法能否算
sVec[i] = '(' + s1 + '-' + s2 + ')';
dVec[i] = a - b;
if (Search24Point(n - 1))
{
return TRUE;
}

sVec[i] = '(' + s2 + '-' + s1 + ')';
dVec[i] = b - a;
if (Search24Point(n - 1))
{
return TRUE;
}

// 看看乘法能否算
sVec[i] = '(' + s1 + '*' + s2  + ')';
dVec[i] = a * b;
if (Search24Point(n - 1))
{
return TRUE;
}

// 看看除法能否算
if (b != 0)
{
sVec[i] = '(' + s1 + '/' + s2  + ')';
dVec[i] = a / b;
if (Search24Point(n - 1))
{
return TRUE;
}
}

if (a != 0)
{
sVec[i] = '(' + s2 + '/' + s1  + ')';
dVec[i] = b / a;
if (Search24Point(n - 1))
{
return TRUE;
}
}
//如果以上的加、减、乘、除都不能得到有效的结果,则恢复数据进行下一轮的计算。
dVec[i] = a;
dVec[j] = b;
sVec[i] = s1;
sVec[j] = s2;
}
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: