当前位置:首页 > 通信资讯 > 正文

c语言24点游戏(24点游戏c++算法)

本文实例为大家分享了C++实现简单24点游戏的具体代码,供大家参考,具体内容如下

随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。

程序风格良好(使用自定义注释模板)

列出表达式无重复。

以下为源代码

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 #include<iostream> #include<string> #include <stdlib.h> #include<time.h> using namespace std; char card[] = { 'A','2','3','4','5','6','7','8','9','10','J','Q','K' }; char buf[4]; double nums[4]; char ope[4] = { '+','-','*','/' }; void cre()//生成 { int i = 0; int j; cout << "生成的四张牌面为:"; srand((unsigned)time(0)); for (i = 0; i<4; i++) { j =rand() % 13; buf[i] = card[j]; } cout << buf[0] << ";" << buf[1] << ";" << buf[2] << ";" << buf[3] << "。" << endl; for (i = 0; i<4; i++) { if (buf[i] == 'A') nums[i] = 1; else if(buf[i] == '2') nums[i] = 2; else if (buf[i] == '3') nums[i] = 3; else if (buf[i] == '4') nums[i] = 4; else if (buf[i] == '5') nums[i] = 5; else if (buf[i] == '6') nums[i] = 6; else if (buf[i] == '7') nums[i] = 7; else if (buf[i] == '8') nums[i] = 8; else if (buf[i] == '9') nums[i] = 9; else if (buf[i] == '10') nums[i] = 10; else if (buf[i] == 'J') nums[i] = 11; else if (buf[i] == 'Q') nums[i] = 12; else if (buf[i] == 'K') nums[i] = 13; } } double calcute(double a, double b, char index) { if (index == '+') return a + b; //若为+,则返回相应结果 else if (index == '-') return a - b; else if (index == '*') return a*b; else if (index == '/') if (b != 0) return a / b; //只有当分母不为0时,返回结果 } void exh()//穷举计算 { double temp[3], tem[2]; //第一个符号放置后,经过计算后相当于剩下三个数,这个数组用于存储这三个数 double sum; //求得的和 int judge = 0; //判断是否找到一个合理的解 for (int i = 0; i < 4; i++) //第一次放置的符号 { for (int j = 0; j < 4; j++) //第二次放置的符号 { for (int k = 0; k < 4; k++) //第三次放置的符号 { for (int m = 0; m < 3; m++) //首先计算的两个相邻数字,共有3种情况,相当于括号的作用 { if (nums[m + 1] == 0 && ope[i] == '/') break; temp[m] = calcute(nums[m], nums[m + 1], ope[i]); temp[(m + 1) % 3] = nums[(m + 2) % 4]; temp[(m + 2) % 3] = nums[(m + 3) % 4]; //先确定首先计算的两个数字,计算完成相当于剩下三个数,按顺序储存在temp数组中 for (int n = 0; n < 2; n++) //三个数字选出先计算的两个相邻数字,两种情况,相当于第二个括号 { if (temp[n + 1] == 0 && ope[j] == '/') break; tem[n] = calcute(temp[n], temp[n + 1], ope[j]); tem[(n + 1) % 2] = temp[(n + 2) % 3]; //先确定首先计算的两个数字,计算完成相当于剩下两个数,按顺序储存在temp数组中 if (tem[1] == 0 && ope[k] == '/') break; sum = calcute(tem[0], tem[1], ope[k]); //计算和 if (sum == 24) //若和为24 { judge = 1; //判断符为1,表示已求得解 if (m == 0 && n == 0) cout << "((" << nums[0] << ope[i] << nums[1] << ")" << ope[j] << nums[2] << ")" << ope[k] << nums[3] << "=" << sum << endl; else if (m == 0 && n == 1) cout << "(" << nums[0] << ope[i] << nums[1] << ")" << ope[k] << "(" << nums[2] << ope[j] << nums[3] << ")=" << sum << endl; else if (m == 1 && n == 0) cout << "(" << nums[0] << ope[j] << "(" << nums[1] << ope[i] << nums[2] << ")" << ope[k] << nums[3] << "=" << sum << endl; else if (m == 1 && n == 1) cout << nums[0] << ope[k] << "((" << nums[1] << ope[i] << nums[2] << ")" << ope[j] << nums[3] << ")=" << sum << endl; else if (m == 2 && n == 0) cout << "(" << nums[0] << ope[j] << nums[1] << ")" << ope[k] << "(" << nums[2] << ope[i] << nums[3] << ")=" << sum << endl; else if (m == 2 && n == 0) cout << nums[0] << ope[k] << "(" << nums[1] << ope[j] << "(" << nums[2] << ope[i] << nums[3] << "))=" << sum << endl; //m=0,1,2 n=0,1表示六种括号放置可能,并按照这六种可能输出相应的格式的计算式 } } } } } } if (judge == 0) cout << "这四张扑克牌无法找到一个合理的解" << endl; //如果没有找到结果,符号位为0 } int main() { int i; int select = 1; cout<< " ################################################" << endl << " # #" << endl << " # 欢迎进入24点游戏 #" << endl << " # #" << endl << " ################################################" << endl; while (select) { cout<< " ################################################" << endl << " # #" << endl << " # 是否开始游戏 #" << endl << " # #" << endl << " # 0.是 1.否 #" << endl << " # #" << endl << " ################################################" << endl; cout << "请输入你的选择(0或1):"; cin >> i; switch (i) { case 0: cre(); exh(); break; case 1: select = 0; break; default: cout << "请在0和1之间选择!" << endl; } } return 0; }

c语言24点游戏(24点游戏c++算法)

效果图1

c语言24点游戏(24点游戏c++算法)

效果图2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://jacokwu.cn/blog/2017/04/12/%E5%8E%9F-c-%E7%AE%80%E5%8D%9524%E7%82%B9%E6%B8%B8%E6%88%8F/

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。