暑假第三周总结
这个星期学的东西比较少因为这个星期主要是数据结构的小学期,这个和数据库的小学期还不太一样,数据库的小学期做的程序都是以前学过的,然而数据结构的小学期考研的都是算法,以前学的时候就学的不是太扎实,所以有一点难度对于我来说,虽然这个学期学的东西比较少,但是也是复习了一下数据结构,接下来就是继续学习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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
2021-07-15 DAY 13