代码:
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
int a;
int b;
int c;
int d;
start:/*为go to 语句做标记*/
cout<<"请输入4个整型数据,范围在1-13之间即可"<<endl;/*按照要求逐步输入四个数据*/
cout<<" 第一个数:";
cin>>a;
cout<<" 第二个数:";
cin>>b;
cout<<" 第三个数:";
cin>>c;
cout<<" 第四个数:";
cin>>d;
cout<<"输出所有算法如下:"<<endl;
if ((a<1)||(a>13)||(b<1)||(b>13)||(c<1)||(c>13)||(d<1)||(d>13))
{ cout<<"输入数据超出取值范围,请重新输入"<<endl;
goto start;
}
/*此处使用go to 语句,其主要目的是为了满足所输入的四个整型
数据的取值范控制在1-13之间,超出该范围就需要重新从键盘输入数据*/
int Cal( float a, float b , float c, float d);
/*罗列出所输入的四个数a,b,c,d的所有排列组合情况,四个数共有24中排列组合*/
Cal(a,b,d,c); Cal(a,b,c,d); Cal(a,c,d,b); Cal(a,c,b,d);
Cal(a,d,b,c); Cal(a,d,c,b); Cal(b,a,c,d); Cal(b,a,d,c);
Cal(b,c,a,d); Cal(b,c,d,a); Cal(b,d,c,a); Cal(b,d,a,c);
Cal(c,a,b,d); Cal(c,a,d,b); Cal(c,b,d,a); Cal(c,b,a,d);
Cal(c,d,a,b); Cal(c,d,b,a); Cal(d,a,b,c); Cal(d,a,c,b);
Cal(d,b,c,a); Cal(d,b,a,c); Cal(d,c,a,b); Cal(d,c,b,a);
return 0;
}
int Cal( float x, float y, float z, float w)
/*罗列出运算表达式的所有情况,在运行界面中如果有满足条件的就显示*/
{
if (x+y+z+w==24)
cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;
else
if(x+y+z-w==24)
cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;
else
if((x+y)*(z+w)==24)
cout<<"("<<x<<"+"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;
else
if((x-y)*(z+w)==24)
cout<<"("<<x<<"-"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;
else
if((x-y)*(z-w)==24)
cout<<"("<<x<<"-"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;
else
if((x+y+z)*w==24)
cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl;
else
if((x-y-z)*w==24)
cout<<"("<<x<<"-"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
else
if((x+y-z)*w==24)
cout<<"("<<x<<"+"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
else
if((x*y*z)/w==24)
cout<<"("<<x<<"*"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl;
else
if((x*y)*(z+w)==24)
cout<<"("<<x<<"*"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;
else
if((x*y)*(z-w)==24)
cout<<"("<<x<<"*"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;
else
if((x*y)*z-w==24)
cout<<"("<<x<<"*"<<y<<")*("<<z<<")-"<<w<<"=24"<<endl;
else
if((x*y)*z+w==24)
cout<<"("<<x<<"*"<<y<<")*("<<z<<")+"<<w<<"=24"<<endl;
else
if(x*y*z*w==24)
cout<<x<<"*"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl;
else
if ((x+y)+(z/w)==24)
cout<<"("<<x<<"+"<<y<<")+("<<z<<"/"<<w<<")"<<"=24"<<endl;
else
if ((x+y)*(z/w)==24)
cout<<"("<<x<<"+"<<y<<")*("<<z<<"/"<<w<<")"<<"=24"<<endl;
else
if((x*y)+z+w==24)
cout<<"("<<x<<"*"<<y<<")+"<<z<<"+"<<w<<"=24"<<endl;
else
if ((x*y)+z-w==24)
cout<<"("<<x<<"*"<<y<<")+"<<z<<"-"<<w<<"=24"<<endl;
else
if((x*y)-(z/w)==24)
cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;
else
if((x*y)+(z/w)==24)
cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;
else
if((x*y)-z-w==24)
cout<<"("<<x<<"*"<<y<<")-"<<z<<"-"<<w<<"=24"<<endl;
else
if((x*y)+(z*w)==24)
cout<<"("<<x<<"*"<<y<<")+("<<z<<"*"<<w<<")"<<"=24"<<endl;
else
if((x*y)-(z*w)==24)
cout<<"("<<x<<"*"<<y<<")-("<<z<<"*"<<w<<")"<<"=24"<<endl;
else
if((x*y)/(z*w)==24)
cout<<"("<<x<<"*"<<y<<")/("<<z<<"*"<<w<<")"<<"=24"<<endl;
else
if((x*y)/(z-w)==24)
cout<<"("<<x<<"*"<<y<<")/("<<z<<"-"<<w<<")"<<"=24"<<endl;
else
if((x*y)/(z+w)==24)
cout<<"("<<x<<"*"<<y<<")/("<<z<<"+"<<w<<")"<<"=24"<<endl;
else
cout<<" "<<endl;
return 0;
}
程序流程图:
运行结果:
总结;
不足之处就是自己用到了goto语句,没有实现面向对象的单入单出
算法思路:
一副扑克牌,用11、12、13代替扑克牌中的J、Q、K 。程序设计中,我主要考虑的是穷举法,从键盘输入四个数据,分别列出这四个数据的所有排列组合,4*3*2*1共24中排列组合发生,加上运算符“+”、“-”、“*”、“/”、“()”,4个数据最多使用到两组括号,罗列出所有的有效的算术表达式。运行程序中,输入四个范围在1-13的整数数据,直接进行计算,将输入的四个数据可以满足的表达式直接输出即可(输入的四个数据经过运算符的排列组合能算出结果为24)。
心得体会:
这次的程序设计,24点游戏,我所设计的程序的时间复杂度很复杂,它需要去挨个遍历一遍从键盘所输入的4个数据的所有排列组合,最多为24种。而且它还需要在所罗列的一系列算术表达式中找到符合自己条件的表达式,进行计算。这是我程序设计的不足之处。用我的这种方法,造成了大量的时间浪费。由于24点游戏是基于扑克牌实现的,一共13*4=52张扑克牌,每个数据最多重复四次,原本我设计的是直接从键盘依次输入四个数据,但是这样不能有效的控制数据的个数,比如说输入4个以上的数据的时候,系统会自动默认取前四个数据,这就会造成程序运行紊乱,于是我就分别依次输入四个数据,避免了不必要的麻烦。输入的数据范围在1-13之间,超出范围时会提示“输入数据超出取值范围,请重新输入:”,把数据类型定义为int 整型,当输入的数据类型不是int型时也无法进行下一步操作。
原本的要求是随机生成四个随机数,整型,范围在1-13之间即可,可是我尝试过很久,这种方法实现程序的时候会有大量的错误,程序无法执行,后来我就自作主张的降低了难度,直接从键盘输入。
总的来说,我的程序很不完美,仅仅是个程序,完全达不到游戏的效果。时间比较匆忙,来不及做出完美的结果,但是,这不会停止我的脚步,在接下来的时间里,我会努力完善我的程序,争取做到完美。
24点游戏
最新推荐文章于 2021-05-09 18:34:19 发布