• 自娱自乐~经典24点游戏


    首先上传界面结果:

    然后附上算法代码:

      1 void CMy24pointgameDlg::OnEnChangeEdit4()
      2 {
      3     // TODO:  如果该控件是 RICHEDIT 控件,则它将不会
      4     // 发送该通知,除非重写 CDialog::OnInitDialog()
      5     // 函数并调用 CRichEditCtrl().SetEventMask(),
      6     // 同时将 ENM_CHANGE 标志“或”运算到掩码中。
      7 
      8     // TODO:  在此添加控件通知处理程序代码
      9     m_WndButton.EnableWindow(TRUE);    //输入第四个数字时,计算按钮变为可按
     10 }
     11 
     12 void CMy24pointgameDlg::Count24PointGame(void)
     13 {
     14 
     15 
     16     UpdateData(TRUE);
     17 
     18     m_iWndNum1 = m_iWndNum1 % 10;
     19     m_iWndNum2 = m_iWndNum2 % 10;
     20     m_iWndNum3 = m_iWndNum3 % 10;
     21     m_iWndNum4 = m_iWndNum4 % 10;
     22 
     23     dVec.push_back(m_iWndNum1);
     24     dVec.push_back(m_iWndNum2);
     25     dVec.push_back(m_iWndNum3);
     26     dVec.push_back(m_iWndNum4);
     27 
     28     CString temp;
     29     temp.Format(L"%d",m_iWndNum1);
     30     sVec.push_back(temp);
     31     temp.Format(L"%d",m_iWndNum2);
     32     sVec.push_back(temp);
     33     temp.Format(L"%d",m_iWndNum3);
     34     sVec.push_back(temp);
     35     temp.Format(L"%d",m_iWndNum4);
     36     sVec.push_back(temp);
     37     
     38     if (!Search24Point(COUNT_OF_NUMBER))
     39     {
     40         m_WndResult += L"Fail.";
     41     }
     42     else
     43     {
     44         m_WndResult = L"";
     45         int c = 0;
     46         for (vector<CString>::iterator it = sResult.begin(); it != sResult.end(); it++)
     47         {
     48             CString temp;
     49             temp = *it;
     50             c++;
     51             if (c == 3)
     52             {
     53                 temp += "
    ";
     54                 c = 0;
     55             }
     56             else
     57                 temp += "	";
     58             m_WndResult += temp;
     59         }
     60     }
     61 
     62     dVec.clear();
     63     sVec.clear();
     64 
     65     m_cResult.SetSel(0,-1);
     66     m_cResult.ReplaceSel(m_WndResult);
     67 
     68     UpdateData(FALSE);
     69 }
     70 
     71 bool CMy24pointgameDlg::Search24Point(int n)
     72 {
     73     if (n == 1)
     74     {
     75         if (dVec.front() - NUMBER_TO_BE_CAL == 0)
     76         {
     77             CString temp;
     78             temp = sVec.front();
     79             temp += " = 24";
     80             sResult.push_back(temp);
     81             return TRUE;
     82         }
     83         else
     84             return FALSE;
     85     }
     86     for (int i = 0; i < n; i++)
     87     {
     88         for (int j = i + 1; j < n ; j++)
     89         {
     90             double a,b;
     91             CString s1,s2;
     92 
     93             a = dVec[i];            // 保存起来,在方法最后再恢复,以便继续计算  
     94             b = dVec[j];            // 保存起来,在方法最后再恢复,以便继续计算  
     95             dVec[j] = dVec[n - 1];    // 将最后一个数挪过来  
     96 
     97             s1 = sVec[i];            // 保存起来,在方法最后再恢复,以便继续计算  
     98             s2 = sVec[j];            // 保存起来,在方法最后再恢复,以便继续计算  
     99             sVec[j] = sVec[n - 1];    // 将最后一个式子挪过来j' 
    100 
    101             // 看看加法能否算出,如果能算出,返回true              
    102             sVec[i] = '(' + s1 + '+' + s2 + ')';
    103             dVec[i] = a + b;
    104             if (Search24Point(n -1))
    105             {
    106                 return TRUE;
    107             }
    108             
    109             // 看看减法能否算  
    110             sVec[i] = '(' + s1 + '-' + s2 + ')';
    111             dVec[i] = a - b;
    112             if (Search24Point(n - 1))
    113             {
    114                 return TRUE;
    115             }
    116             
    117             sVec[i] = '(' + s2 + '-' + s1 + ')';
    118             dVec[i] = b - a;
    119             if (Search24Point(n - 1))
    120             {
    121                 return TRUE;
    122             }
    123 
    124             // 看看乘法能否算 
    125             sVec[i] = '(' + s1 + '*' + s2  + ')';
    126             dVec[i] = a * b;
    127             if (Search24Point(n - 1))
    128             {
    129                 return TRUE;
    130             }
    131 
    132             // 看看除法能否算 
    133             if (b != 0)
    134             {
    135                 sVec[i] = '(' + s1 + '/' + s2  + ')';
    136                 dVec[i] = a / b;
    137                 if (Search24Point(n - 1))
    138                 {
    139                     return TRUE;
    140                 }
    141             }
    142 
    143             if (a != 0)
    144             {
    145                 sVec[i] = '(' + s2 + '/' + s1  + ')';
    146                 dVec[i] = b / a;
    147                 if (Search24Point(n - 1))
    148                 {
    149                     return TRUE;
    150                 }
    151             }
    152              //如果以上的加、减、乘、除都不能得到有效的结果,则恢复数据进行下一轮的计算。   
    153             dVec[i] = a;
    154             dVec[j] = b;
    155             sVec[i] = s1;
    156             sVec[j] = s2;
    157         }
    158     }
    159     return false;
    160 }
  • 相关阅读:
    加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 1 The Two Fundamental Rules (1.5-1.6)
    加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 1 The Two Fundamental Rules (1.1-1.4)
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: FINAL
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 5 Window to a Wider World
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 4 Dependent Samples
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 3 One-sample and two-sample tests
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 2 Testing Statistical Hypotheses
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 1 Estimating unknown parameters
    求旋转数组的最小数字(剑指offer)
    Vue创建局部组件
  • 原文地址:https://www.cnblogs.com/SamRichard/p/3677727.html
Copyright © 2020-2023  润新知