如何用c++编写24点游戏?

请给我一个程序,并简述,不必太多,谢谢!!!要能够实现24点游戏的c++程序

#include "iostream"
#include "string"
using namespace std;

//---------------------------------- Stack.h --------------------------
//定义Stack类
const maxsize=20;
enum Error_code { success, overflow, underflow };

template <class T>
class Stack {
public:
Stack();
bool empty() const;
bool full() const;
int size() const;
void clear();
Error_code top(T &item) const;
Error_code pop();
Error_code push(const T &item);
private:
int count;
T entry[maxsize];
};

template <class T>
Stack<T>::Stack() {
count=0;
}

template <class T>
bool Stack<T>::empty () const {
return count==0;
}

template <class T>
bool Stack<T>::full () const {
return count==maxsize;
}

template <class T>
int Stack<T>::size() const {
return count;
}

template <class T>
void Stack<T>::clear() {
count=0;
}

template <class T>
Error_code Stack<T>::top (T &item) const {
if (empty()) return underflow;
item= entry[count-1];
return success;
}

template <class T>
Error_code Stack<T>::pop () {
if (empty()) return underflow;
count--;
return success;
}

template <class T>
Error_code Stack<T>::push (const T &item) {
if (full()) return overflow;
entry[count++]=item;
return success;
}

//---------------------------------- Main Program ----------------------

Stack<char> sign;
Stack<double> num;
int set; // 判断程序中的异常,以便适时退出

void process(char c) { //计算两个数的 + - * / 运算
int k=0;
double a,b;
sign.pop();
if (num.top(b)==success){ //判断例外
num.pop();
if (num.top(a)==success) {
num.pop();
k=1;
}
}
if (k) {
switch (c) {
case '+': num.push(a+b); break;
case '-': num.push(a-b); break;
case '*': num.push(a*b); break;
case '/':
if (b==0) { //分母不能为0
set=4;
num.push(-1);
}
else
num.push(a/b);
break;
}
}
else {set=1;num.push(-1);}
}
//////////////////////////////////////////////////////////////输入表达式
void get_command(string &str) {
cout<<"\n请输入要进行运算的表达式,包括\" +,-,*,/,=,(,)\"和数字,"<<endl
<<"例如:\" 3+2.5*(6-25/4)-8.32= \"."<<endl
<<"注意: 以数字开头,等号结尾,中间括号要匹配."<<endl;
cin>>str;
}
/////////////////////////////////////////////求值 表达式
double do_command(const string &str) {
string s="";
double outcome=-1;
char c;
for (int i=0;str[i]!='\0';i++)
{
if (set!=0) break; //例外 则停止运行
while (1) { //分离数据与运算符
if (str[i]<='9' && str[i]>='0' || str[i]=='.') {
s+=str[i];
i++;
}
else {
if(s!="") {
if (num.push(atof(s.c_str ()))==overflow)
set=3;
s="";
}
break;
}
}
char ch= str[i];
switch (ch) { //处理运算的优先级,并注意例外抛出
case '*':
case '/':
if (sign.top(c)==success)
if(c=='*'||c=='/') process(c);
if (sign.push(ch)==overflow)
set=3;
break;
case '+':
case '-':
while (sign.top(c)==success) {
if (c!='(') process(c);
else break;
}
if (sign.push(ch)==overflow)
set=3;
break;
case '(':
if (sign.push(ch)==overflow)
set=3;
break;
case ')':
while (sign.top(c)==success) {
if (c!='(') process(c);
else break;
}
sign.pop();
break;
case '=':
while (sign.top(c)==success) {
if (c!='(') process(c);
else break;
}
break;
default: set=2;break;
}
}
if (num.size()==1 && sign.size()==0)
num.top(outcome);
else set=1;
if (set==0) cout<<"运算结果是:\n"<<endl; //出错时的错误信息
else {
outcome=-1;
if (set==1) cout<<"\n您输入的不匹配,有错误发生。Result lost!!"<<endl;
if (set==2) cout<<"\n您输入了非法字符 , 请重新输入,谢谢合作!"<<endl;
if (set==3) cout<<"\nStack is full, Lost result!!"<<endl;
if (set==4) cout<<"\n 分母为0,不能进行除法运算,出现溢出, Lost result!!"<<endl;
}
return outcome;
}
// ///////////////////////////////////////////////////////////主程序main()
int f()
{
double out;
do {
string str,s;
set=0;
get_command(str);
s=str;
if( str[0]=='-') str='0'+str; //处理表达式中的负号
for (int i=1;str[i]!='\0';i++) {
if (str[i]=='-' && str[i-1]=='(') {
str.insert (i,"0");
i++;
}
} out= do_command(str);
cout<<s<<out<<endl; //输出结果 我gai过此行
cout<<"如果你算的结果不等于24,需要重新计算请输入你算出的结果,程序有漏洞,请合作。"<<endl;
cin>>out;
cout<<"谢谢合作"<<endl<<endl;
}while (out!=24); //允许多次执行运算
return out;
}
int main(void)
{
int ii,zz,jj;

printf("0-12的4个数字\n\n");
for(jj=0;jj<2;)
{
for(ii=0; ii<4; ii++)
{
zz=rand() % 12;
cout<<zz<<endl;
}
cout<<"请用这4个数字算出24"<<endl;
f();
cout<<"是否继续;是1否2"<<endl;
cin>>jj;
cout<<"\n\n\n\n\n";

}

return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

求24点游戏的算法,VC++
以下是c++(win32工程)的代码,你看一下对不对 include <iostream> include using namespace std;const int size=9;class guess { public:void randnum();void cutnumguess(int);void done();bool guessn;int a;int b;private:int rslt[4];int guessnum[4];}game;void guess::randnum(){...

加减乘除求24点的游戏怎么用C语言编啊?
if(!check(ch)&&!exam2(ch,n[0],n[1],n[2],n[3])&&fabs(figure(ch1)-24)<=0.000001) { printf("\\nGood job!\\n"); getch(); } else { printf("\\nWrong!\\n\\nAnswer: "); sign(n[0],n[1],n[2],n[3]); getch(); } } } } void second() { int n[4],i; ...

用扑克牌实现24点游戏,c++编写
if(n2==3)cout<<t2<<") \/ "<<t3;if(s2[n1][n2]+t4==24)cout<<") + "<<t4<<" = 24 \\n";if(s2[n1][n2]-t4==24)cout<<") - "<<t4<<" = 24 \\n";if(s2[n1][n2]*t4==24)cout<<") * "<<t4<<" = 24 \\n";if(s2[n1][n2]\/t4==24)cout<<") \/ "<<...

求高手用c++解决二十四点的问题,具体如下
24点这个问题最直接的方法就是,列举四个数所有的排列组合,加上各种运算符以及括号,所有的情况经过处理之后可以得到一个包含所有计算结果和计算式的列表,从其中寻找24的影踪就可以了。如果不计计算结果重复的情况,最终的结果有7680种,数据量还是有点大,因此这个算法需要进一步的优化。例如,考虑到加法和乘法的交换律,如...

24点游戏算法 C\/C++ 求解释,要汉语注释!!!越详细越好!!!
define RESULT 24 define LENGTH 20 double number[COUNT]; \/\/这里一定要用double,看看第一题的答案就知道为什么了 char *expression[COUNT]; \/\/保存表达式 void combine(char *exp, char *exp1, char *exp2, char *op); \/\/连接字符串 int test(int n);void combine(char *exp, cha...

如何利用C++程序编写24点游戏(有要求)
(1)使用C++语言,源程序要有适当的注释,使程序容易阅读(2) 至少采用文本菜单界面 (3) 学生可自动增加新功能模块(视情况可另外加分)(4) 写出课程设计报告,具体要求见相关说明文档提示:1. 程序采用穷举法,对输入的4个数进行排列,有 4!=24种。用for来循环来实现。 2. 运算符号有4种,分别是 +、-、*、\/,...

c++作业扑克牌24点要求:具体的图形化展示整个游戏。能够随机抽取4张牌...
include "string"using namespace std;\/\/--- Stack.h --- \/\/定义Stack类 const maxsize=20;enum Error_code { success, overflow, underflow };template <class T> class Stack { public:Stack();bool empty() const;bool full() const;int size() const;void clear();Error_code top(T ...

编程C语言 24点游戏
编程C语言 24点游戏 2.1功能需求计算机能随机生成四个某范围的4个整数(或者用户输入4个整数),如果有解,则输出所有不同的解;如果没解,则输出一个小于24但最接近24的一个最大最优解。计算的没一步不能... 2.1 功能需求计算机能随机生成四个某范围的4个整数(或者用户输入4个整数),如果有解,则输出所有不同的...

24点的算法 C++
此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。 问题既然出现了,我们当然要解决。冥思苦想之际,我...

求教24点游戏的算法(最好用C++)
24点游戏是一个大众化的益智游戏.任意给四张扑克牌(不包括大小王),只能够用加,减,乘,除以及适当的括号连接这四张牌,无论顺序,使计算结果为24,或者宣布根本就是无解的.需要注意的是,每张牌必须运算,并且只能运算一次,J,Q,K可设置为11,12,13.本程序目的就是算出一组牌的所有解(不同形式的式子算不同解),...

相似回答