自娱自乐~经典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; }
相关文章推荐
- qsort 的使用方法
- iptables基础知识.详解
- TCP/IP、Http、Socket的区别
- Linux系统中vim工具常用命令大全
- 数据库
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
- incident impendence coefficient
- 转载:C/C++关于string.h头文件和string类
- html中span
- linux网络编程之socket(十二):select函数的并发限制和 poll 函数应用举例
- 修改Windows Server 远程登录(远程桌面)最大连接数目
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装
- 关于数据库绿色版的安装