C程序设计 24点小游戏由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言实现24点游戏”。
1设计内容
有2、3、4、5、6、7、8、9、10、J、Q、K、A共13张牌,编一程序,判断对任意给定的4张牌,能否在进行加、减、乘、除运算后,其运算结果等于24。其中J按11计算,Q按12计算,K按13计算,A按1计算。如果能得到结果24,则输出可得到该结果的计算表达式。
若输入数据符合要求,且经过加、减、乘、除运算后,运行结果能得到24,如输入5,5,5,1,则显示可得到该结果的计算表达式,如5*(5-(1/5))。
若输入数据小于1或者大于13或者不是整数时,提示输入错误。若输入不能运算出24的数据,如1,1,1,1,则显示经过加、减、乘、除运算后,运行结果不能得到24。
2程序设计
2.1存储结构设计
由于要储存的数据不多,主要是储存所输入的4个整数,所以采用一维数组(a[4])储存。而计算过程会出现小数,所以数据类型采用浮点型(float)。
2.2主要程序设计
程序采用穷举法,对输入的4个数进行排列,有 4!=24种。用for来循环,if来判断,算法如下。for(i=0;i
用if来判断括号的类型,然后作出不同顺序的运算。括号有两对,主要有两种类型:一种是()()型,如(a+b)*(c+d);另一种是(())型,继续细分又有
种类型,如下a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。算法如下 if((!(i==3 && b==0))&&(!(j==3 && c==0))&&(!(k==3 && d==0))){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,sum1,c);sum3=arithmetic(k,sum2,d);} if(k==2){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);sum3=sum1*sum2;} if(k==3){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);if(sum2!=0){ sum3=sum1/sum2;} } 在输入方面,按要求,数据类型是 1 至13 的整数,符合则进行运算,不符合则重新输入。用if语句来实现,如下 if(a[i]13 || a[i]!=int(a[i]))
在输出方面,运算结果等于 24就输出,利用调用的参数判断输出形式,有5种:(a+b)*(c+d),a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。算法如下:
void show(int type,int i,int j,int k,float a,float b,float c,float d){ if(type==1){
if(j==4 || j==5){
if(k==4 || k==5)
cout
else
cout
else if(k==4 || k==5)
cout
}
else
cout
} if(type==2 || type==3){ cout
程序流程框图如图2-3所示:
图2-3 3程序调试
3.1测试用例
开始运行时的页面如图4-1所示:
图4-1 首先,测试程序能不能运算出正确的结果,输入数据6,6,6,6,出现了44组符合要求的解,如图4-2所示。
接着输入数据2,9,7,14,提示输入错误,重新输入2,7,5,13,能得到正确运行结果,如图4-2所示。
输入4,9,11,13,不能运算得到24,显示“你所输入的数,经过四则运算后,不等于24点”,如图4-3所示。
输入5,5,5,1,这组数据要运算得到24,一定会出现小数,因为只有一种运算,即5*(5* /" 4个运算符号选3个,有4*4*4=64种
for(j=0;j
// 3种运算符排列
有 3!=6 种
for(k=0;k
{
if((!(i==3 && b==0))&&(!(j==3 && c==0))&&(!(k==3 && d==0)))// 括号的类型为(()){ // 3为做除法运算的标志,除数为 0 时,跳过
= =
sum1=arithmetic(i,a,b);
//a,b做 以 i 为标志的运算,然后把值赋给sum1
sum2=arithmetic(j,sum1,c);//sum1,c做 以 j 为标志的运算,然后把值赋 给sum2
sum3=arithmetic(k,sum2,d);//sum2,d做 以 k 为标志的运算,然后把值赋给sum3
if(fabs(sum3-24)
{
check++;
//标志能运算出24
show(1,i,j,k,a,b,c,d);// 输出运算出 24 的表达式
}
}
if(k==2)//()*()
{
sum1=arithmetic(i,a,b);//a,b做 以 i 为标志的运算,然后把值赋给sum1
sum2=arithmetic(j,c,d);//sum1,c做 以 j 为标志的运算,然后把值赋给sum2
sum3=sum1*sum2;
if(fabs(sum3-24)
{
check++;
//标志能运算出24
show(2,i,j,k,a,b,c,d);// 输出运算出 24 的表达式
}
}
if(k==3)// 括号的类型为()()
{
sum1=arithmetic(i,a,b);//sum1,c做 以 j 为标志的运算,然后把值赋给sum2
sum2=arithmetic(j,c,d);//sum1,c做 以 j 为标志的运算,然后把值赋给sum2
if(sum2!=0)
{
sum3=sum1/sum2;
if(fabs(sum3-24)
{
check++;
//标志能运算出24
show(3,i,j,k,a,b,c,d);
// 输出运算出 24 的表达式
}
}
}
} }
void main(){ int i,j,k,l,m=0;
float a[4];
//储存所输入的 4个 整数
while(m==0){ m=1;
cout
for(i=0;i
cin>>a[i];
if(a[i]13 || a[i]!=int(a[i]))//判断是否为符合要求的整数
{ if(m!=0){
}
cout
m=0;} } for(i=0;i
//4的排列 4!=24,每中情况调用calculate
for(j=0;j
if(j!=i)
//第2数和第1个数不能重复
for(k=0;k
if(k!=j && k!=i)//第3数和第1,2个数不能重复
for(l=0;l
if(l!=i && l!=j && l!=k)//第4数和第1,2,3个数不能重复
{ calculate(a[i],a[j],a[k],a[l]);//调用calculate函数,进行进行加、减、乘、除运算
}
} if(check==0)//不能运算出24 { cout