• 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
LINnnnnnnner java  2014年01月05日
请问怎样改这个程序的输入错误呢?
#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;
}
...全文
85 点赞 收藏 回复
写回复
回复

还没有回复,快来抢沙发~

发动态
发帖子
C++ Builder
创建于2007-08-02

2550

社区成员

10.2w+

社区内容

C++ Builder相关内容讨论区
社区公告
暂无公告