中易网

c++24点游戏

答案:1  悬赏:10  
解决时间 2021-03-01 23:15
我现在需要一个24点的C++程序
因为要做课程设计了
没有时间现做了 只好通过各位的帮助了
程序不要太好 能运行就好
最好弄个400多行
谢谢了
最佳答案
我是个大一学生,前段时间刚好编了这个,呵呵,给你用吧,不过漏洞百出,给你们老师看了一定相信是你自己做的,也有很多错误哦

#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;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
网上小额贷款有正正没有什么手续费和前期费用
统一场论是什么?
什么电视剧有老玉米这个角色?好像是悬疑类型
现在的儿童平衡车能培养小朋友的平衡力和专注
为什么房屋拆迁不能原地还建 我们这里要拆迁
启德保健品店地址在什么地方,想过去办事
初中生作文:我与创新
用电脑考试选择下一题的快捷键是什么?
容县商业总公司我想知道这个在什么地方
有个人经常给我女朋友发红包怎么回事
博乐琴行艺术培训中心这个地址在什么地方,我
八字 戌土库逢空什么意思
为什么中国的小偷那么多
mysql error1241:Operand should contain 1 c
永甸客运站地址在什么地方,想过去办事
推荐资讯
马油膏可以去黄美白吗?
金湖乐缘招待所怎么去啊,有事要去办理
昨天的公务员考试行政能力测试单号考生和双号
曲沃县舞蹈家协会在哪里啊,我有事要去这个地
被男的咬奶奶什么感觉
我的蜘蛛平台为何用AMD OverDrive 超频不成功
裕居商务园在什么地方啊,我要过去处理事情
多项式4X^2+4加上一个单项式后,使它能成为一
中国允许带这巨额人民币到美国银行兑换.赚取
问男朋友想我不回个嗯是什么意思
“此谓诚於中,形于外。故君子必慎其独也。”
为什么很多人小时候的梦想都是成为一名科学家
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?