请问怎样改这个程序的输入错误呢?

LINnnnnnnner 2014-01-05 05:45:45
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
char sign[4]={'+','-','*','/'};//定义一个全局变量,用于储存加减乘除符号,方便下面符号判断
class game24point//24点纸牌游戏类
{
private:
double a[4];//为实现精确计算,防止计算结果为小数却被强制转换为整数,采用double变量
public:
game24point();//构造函数
double c(double,double,char);//计算函数,给出一个符号两个有顺序的数,计算结果
void find();//搜索函数,用于寻找合适的解
void shuzhi();//得到的四张纸牌的数值
};
game24point::game24point()
{
char ch[2];//由于纸牌中除了数字还有AJQK等字符,故使用字符数组
int x,y;
srand(time(0));
x=rand()%13+1;
y=rand()%13+1;
a[2]=x;
a[3]=y;
cout<<" ##########################################"<<endl;
cout<<" ## ##"<<endl;
cout<<" ## 请输入2个数 ##"<<endl;
cout<<" ## ##"<<endl;
cout<<" ##########################################"<<endl;
for(int i=0;i<2;i++)
{
cin>>ch[i];
if(ch[i]=='J') a[i]=11;
else if(ch[i]=='Q') a[i]=12;
else if(ch[i]=='K') a[i]=13;
else if(ch[i]=='A') a[i]=1;
else if(ch[i]=='2') a[i]=2;
else if(ch[i]=='3') a[i]=3;
else if(ch[i]=='4') a[i]=4;
else if(ch[i]=='5') a[i]=5;
else if(ch[i]=='6') a[i]=6;
else if(ch[i]=='7') a[i]=7;
else if(ch[i]=='8') a[i]=8;
else if(ch[i]=='9') a[i]=9;
else if(ch[i]=='10') a[i]=10;
else
{
cout<<" ##########################################"<<endl;
cout<<" ## ##"<<endl;
cout<<" ## "<<"第"<<i+1<<"个数据输入有误!" <<" ##"<<endl;
cout<<" ## ##"<<endl;
cout<<" ##########################################"<<endl;
cout<<"====================================================================="<<endl;
}
}//纸牌字符转换为数值
cout<<"电脑出的牌的点数为:"<<x<<" "<<y<<endl;
}
double game24point::c(double a,double b,char c)
{
if(c=='+')
return a+b;//若为+,则返回相应结果
else if(c=='-')
return a-b;
else if(c=='*')
return a*b;
else if(c=='/')
if(b!=0)
return a/b;//只有当分母不为0时,返回结果
}
void game24point::find()
{
double pl[3],lw[2];//第一个符号放置后,经过计算后相当于剩下三个数,这个数组用于存储这三个数
double sum;//求得的最后的结果
int judge=0;//判断是否找到一个合理的解
cout<<" ##########################################"<<endl;
cout<<" ## ##"<<endl;
cout<<" ## 正在计算结果,请等待 ##"<<endl;
cout<<" ## ##"<<endl;
cout<<" ##########################################"<<endl;
cout<<"====================================================================="<<endl;
cout<<" ##########################################"<<endl;
cout<<" ## ##"<<endl;
cout<<" ## 本次24点游戏结果 ##"<<endl;
cout<<" ## ##"<<endl;
cout<<" ##########################################"<<endl;
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(a[m+1]==0 && sign[i]=='/') break;
pl[m]=c(a[m],a[m+1],sign[i]);
pl[(m+1)%3]=a[(m+2)%4];
pl[(m+2)%3]=a[(m+3)%4];//先确定首先计算的两个数字,计算完成相当于剩下三个数,按顺序储存在temp数组中
for(int n=0;n<2;n++)//三个数字选出先计算的两个相邻数字,两种情况,相当于第二个括号
{
if(pl[n+1]==0 && sign[j]=='/') break;
lw[n]=c(pl[n],pl[n+1],sign[j]);
lw[(n+1)%2]=pl[(n+2)%3];//先确定首先计算的两个数字,计算完成相当于剩下两个数,按顺序储存在temp数组中
if(lw[1]==0 && sign[k]=='/') break;
sum=c(lw[0],lw[1],sign[k]);//计算和
if(sum==24)//若和为24
{
judge=1;//判断符为1,表示已求得解
if(m==0 && n==0)
cout<<"(("<<a[0]<<sign[i]<<a[1]<<")"<<sign[j]<<a[2]<<")"<<sign[k]<<a[3]<<"="<<sum<<endl;
else if(m==0 && n==1)
cout<<"("<<a[0]<<sign[i]<<a[1]<<")"<<sign[k]<<"("<<a[2]<<sign[j]<<a[3]<<")="<<sum<<endl;
else if(m==1 && n==0)
cout<<"("<<a[0]<<sign[j]<<"("<<a[1]<<sign[i]<<a[2]<<")"<<sign[k]<<a[3]<<"="<<sum<<endl;
else if(m==1 && n==1)
cout<<a[0]<<sign[k]<<"(("<<a[1]<<sign[i]<<a[2]<<")"<<sign[j]<<a[3]<<")="<<sum<<endl;
else if(m==2 && n==0)
cout<<"("<<a[0]<<sign[j]<<a[1]<<")"<<sign[k]<<"("<<a[2]<<sign[i]<<a[3]<<")="<<sum<<endl;
else if(m==2 && n==0)
cout<<a[0]<<sign[k]<<"("<<a[1]<<sign[j]<<"("<<a[2]<<sign[i]<<a[3]<<"))="<<sum<<endl;
//m=0,1,2 n=0,1表示六种括号放置可能,并按照这六种可能输出相应的格式的计算式
}
}
}
}
}
}

if(judge==0)
cout<<"这四张扑克牌无法找到一个合理的解"<<endl;//如果没有找到结果,符号位为0
cout<<"====================================================================="<<endl;
cout<<endl<<endl;
cout<<"计算完成!"<<endl;
}
void game24point::shuzhi()
{
for(int i=0;i<4;i++)
{
cout<<"第"<<i+1<<"张牌 "<<a[i]<<endl;
}
int suanpai;
srand(time(0));
suanpai=rand()%2;//随机得出谁计算
if(suanpai==0)
{
cout<<" ##########################################"<<endl;
cout<<" ## ##"<<endl;
cout<<" ## 由电脑算牌 ##"<<endl;
cout<<" ## ##"<<endl;
cout<<" ##########################################"<<endl;
cout<<"====================================================================="<<endl;
}
else
{
cout<<" ##########################################"<<endl;
cout<<" ## ##"<<endl;
cout<<" ## 由你算牌 ##"<<endl;
cout<<" ## ##"<<endl;
cout<<" ##########################################"<<endl;
cout<<"====================================================================="<<endl;
}
}

int main(void)
{

game24point yinyong;//obj表示目标文件
yinyong.shuzhi();
cout<<endl;
yinyong.find();
cout<<endl;
return 0;
}
...全文
124 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧