暑假第三周总结

这个星期学的东西比较少因为这个星期主要是数据结构的小学期,这个和数据库的小学期还不太一样,数据库的小学期做的程序都是以前学过的,然而数据结构的小学期考研的都是算法,以前学的时候就学的不是太扎实,所以有一点难度对于我来说,虽然这个学期学的东西比较少,但是也是复习了一下数据结构,接下来就是继续学习python了

数据结构小学期我选的题目是做一个24点的游戏,就是随机从去掉大小王的扑克牌中抽出4张扑克牌让他们进行加减乘除运算之后可以恰好为24点,后面的难度扩展是可以选择更多的牌进行运算恰好达到24点的游戏。

其实整个思路的核心比较简单 我用的是一个穷举法加上递归的算法把所有的情况全部试验一遍以后把符合结果的拿出来进行输出就行了

复制代码
  1 #include <iostream>
  2 #include <string>
  3 #include <math.h>
  4 using namespace std;
  5 const double LING = 1E-6;//非常小的数,用来抵消浮点运算
  6 const int VOLUE = 24;//24为目的
  7 double number[100];//存储随机数数字
  8 string expression[100];//存储表达式的数组
  9 bool m_judge = false; //判断是否有解。
 10 int count1 = 0;
 11 int suijishu() {//产生一个随机数,并返回
 12     return rand() % 13 + 1;
 13 }
 14 void Find(int n)//遍历两个数组求表达式函数
 15 {
 16     if (n == 1)
 17     {
 18         if (fabs(number[0] - VOLUE) <= LING)
 19         {
 20             cout << expression[0] << "\t\t";
 21             m_judge = true;
 22             count1++;
 23             if ((count1 % 3) == 0) //使输出时每行三个表达式
 24                 cout << endl;
 25         }
 26         else
 27         {
 28         }
 29     }
 30     for (int i = 0; i < n; i++)//查找
 31     {
 32         for (int j = i + 1; j < n; j++)//与其后面的查找进行计算
 33         {
 34             double a, b;
 35             string expressiona, expressionb;
 36             a = number[i];
 37             b = number[j];
 38             number[j] = number[n - 1];
 39             expressiona = expression[i];
 40             expressionb = expression[j];
 41             expression[j] = expression[n - 1];
 42             expression[i] = '(' + expressiona + '+' + expressionb + ')';
 43             number[i] = a + b;
 44             Find(n - 1);
 45             expression[i] = '(' + expressiona + '-' + expressionb + ')';
 46             number[i] = a - b;
 47             Find(n - 1);
 48             expression[i] = '(' + expressionb + '-' + expressiona + ')';
 49             number[i] = b - a;
 50             Find(n - 1);
 51             expression[i] = '(' + expressiona + '*' + expressionb + ')';
 52             number[i] = a * b;
 53             Find(n - 1);
 54             if (b != 0)
 55             {
 56                 expression[i] = '(' + expressiona + '/' + expressionb + ')';
 57                 number[i] = a / b;
 58                 Find(n - 1);
 59             }
 60             if (a != 0)
 61             {
 62                 expression[i] = '(' + expressionb + '/' + expressiona + ')';
 63                 number[i] = b / a;
 64                 Find(n - 1);
 65             }
 66             number[i] = a;
 67             number[j] = b;
 68             expression[i] = expressiona;
 69             expression[j] = expressionb;
 70         }
 71     }
 72 }
 73 int main()
 74 {    
 75     int n;
 76     cout << "*******************************" << endl;
 77     cout << "          24点游戏             " << endl;
 78     cout << "*******************************" << endl;
 79     cout << "     在本轮游戏中:#代表10     " << endl;
 80     cout << "*******************************" << endl;
 81     cout << "请选择:1.4张纸牌,2.n张纸牌" << endl;
 82     cout << "*******************************" << endl;
 83     int choice;
 84     cin >> choice;
 85     if (choice == 1) {
 86         n = 4;
 87     }
 88     else {
 89         cout << "请输入n:\n";
 90         cin >> n;
 91     }
 92     cout << "*******************************" << endl;
 93     cout << "本次你选择的牌为:" << endl;
 94     srand((int)time(0));
 95     for (int i = 0; i < n; i++)
 96     {
 97         number[i] = suijishu();
 98         if (number[i]==1) {
 99             expression[i] = 'A';
100             cout << expression[i] << " ";
101             continue;
102         }
103         if (number[i] == 10) {
104             expression[i] = '#';
105             cout << expression[i] << " ";
106             continue;
107         }
108         if (number[i] == 11) {
109             expression[i] = 'J';
110             cout << expression[i] << " ";
111             continue;
112         }
113         if (number[i] == 12) {
114             expression[i] = 'Q';
115             cout << expression[i] << " ";
116             continue;
117         }
118         if (number[i] == 13) {
119             expression[i] = 'K';
120             cout << expression[i] << " ";
121             continue;
122         }
123             expression[i] = number[i] + '0';
124             cout << expression[i]<<" ";
125     }
126     cout << endl;
127     Find(n);
128     if (m_judge == true)
129     {
130         cout << "\n成功!" << endl;
131         cout << "总共的计算方法共有: " << count1 << endl;
132     }
133     else
134     {
135         cout << "失败!" << endl;
136     }
137     return 0;
138 }
复制代码

 

                 

 

posted @   李迎辉  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
历史上的今天:
2021-07-15 DAY 13
点击右上角即可分享
微信分享提示