实现24点游戏-穷举法
来源:互联网 发布:中国微观数据库 编辑:程序博客网 时间:2024/05/16 03:47
算法设计思路:
穷举法就是列出4个数字加减乘除的各种可能性。首先我们将4个数设为a,b,c,d,,将其排序列出四个数的所有排序序列组合(共有A44=24种组合)。再进行符号的排列表达式,其中算术符号有+,—,*,/,(,)。其中有效的表达式有a*(b-c/b),a*b-c*d,等等。列出所有有效的表达式。其中a,b,c,d的范围是1到13。用随机函数产生四个1-13的数。要实现24点的算法,就是通过4个数字,4个运算符号和2对括号(最多为2对),通过各种组合判断其结果是否为24。我们用a,b,c,d代替4个数字。考虑每种可能,总的算法就有7种可能。
1没括号的(形如a*b*c*d);
2有括号的(形如(a * b) * c * d);
3有括号的(形如(a * b * c) * d);
4有括号的(形如a * (b * c) * d);
5有括号的(形如(a * b) * (c * d));
6有括号的(形如((a * b) * c) * d);
7有括号的(形如(a * (b * c)) * d)。
我的程序对运算式子进行穷举,去掉等价的和无效的,最终合法表达式只有73种。
/*File name:24点游戏.cppAuthor:杨柳Date:2017.4.5Function list:int Calculate ( float x, float y, float z, float w)IDE:DEV-c++ */#include <iostream> #include <stdlib.h>using namespace std; int flag=1;int main() { int Calculate ( float x, float y, float z, float w);//函数声明 while(flag){float a,b,c,d; int x;cout<<"随机输入4个数据"<<endl; a=rand()%13+1;cout<<" 第一个数:"<<a<<endl;b=rand()%13+1; cout<<" 第二个数:"<<b<<endl;c=rand()%13+1; cout<<" 第三个数:"<<c<<endl; d=rand()%13+1;cout<<" 第四个数:"<<d<<endl; cout<<"输出所有算法如下:"<<endl; Calculate (a,b,c,d); cout<<"退出请按0 or 继续请按1"<<endl; cin>>x; if(x==0) flag=0; }return 0; } int Calculate ( float x, float y, float z, float w) // a .b.c.d 的所有排列组合情况和运算表达式的所有情况{ if(x*y-z+w==24) cout<<x<<"*"<<y<<"-"<<z<<"+"<<w<<"=24"<<endl; if ((x-y)*z*w==24) cout<<"("<<x<<"-"<<y<<")"<<"*"<<z<<"*"<<w<<"=24"<<endl;if ((x*y)+(z*w)==24) cout<<"("<<x<<"*"<<y<<")+("<<z<<"*"<<w<<")"<<"=24"<<endl; if ((x+y)*z*w==24) cout<<"("<<x<<"+"<<y<<")"<<"*"<<z<<"*"<<w<<")"<<"=24"<<endl;if (x*y*z*w==24) cout<<x<<"*"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl; if ((x+y*z)*w==24) cout<<"("<<x<<"+"<<y<<"*"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y-z)*w==24) cout<<"("<<x<<"*"<<y<<"-"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y)+z+w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"+"<<w<<"=24"<<endl; if ((x/y-z)*w==24) cout<<"("<<x<<"/"<<y<<"-"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x-(y-z))*w==24) cout<<"("<<x<<"-"<<"("<<y<<"-"<<z<<")"<<")*"<<w<<"=24"<<endl;if (x-(y-z-w)==24) cout<<x<<"-"<<"("<<y<<"-"<<z<<"-"<<w<<")"<<"=24"<<endl;if (x+y-(z-w)==24) cout<<x<<"+"<<y<<"-"<<"("<<z<<"-"<<w<<")"<<"=24"<<endl;if (x*(y/z-w)==24) cout<<x<<"*"<<"("<<y<<"/"<<z<<"-"<<w<<")"<<"=24"<<endl;if ((x-y*z)*w==24) cout<<"("<<x<<"-"<<y<<"*"<<z<<")"<<"*"<<w<<"=24"<<endl;if (x*(y-z)+w==24) cout<<x<<"*"<<"("<<y<<"-"<<z<<")"<<"+"<<w<<"=24"<<endl;if (x+y+z/w==24) cout<<x<<"+"<<y<<"+"<<z<<"/"<<w<<"=24"<<endl; if ((x-y)*(z-w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl; if ((x+y)*z/w==24) cout<<"("<<x<<"+"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl; if (x*y/(z-w)==24) cout<<x<<"*"<<y<<"/"<<"("<<z<<"-"<<w<<")"<<"=24"<<endl; if ((x+y)*(z+w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;if ((x-y)*z/w==24) cout<<"("<<x<<"-"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl; if (x+(y+z)/w==24) cout<<x<<"+"<<"("<<y<<"+"<<z<<")"<<"/"<<w<<"=24"<<endl;if (x*y/(z+w)==24) cout<<x<<"*"<<y<<"/"<<z<<"+"<<w<<")"<<"=24"<<endl; if ((x+y)*z/w==24) cout<<"("<<x<<"+"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl; if ((x*y+z)*w==24) cout<<"("<<x<<"*"<<y<<"+"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y-z)/w==24) cout<<"("<<x<<"*"<<y<<"-"<<z<<")"<<"/"<<w<<"=24"<<endl; if ((x/y+z)*w==24) cout<<"("<<x<<"/"<<y<<"+"<<z<<")"<<"*"<<w<<"=24"<<endl; if ((x*y)/z/w==24) cout<<"("<<x<<"*"<<y<<")/"<<z<<"/"<<w<<"=24"<<endl;if (x+y+z-w==24) cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;if (x-(y-z)+w==24) cout<<x<<"-"<<"("<<y<<"-"<<z<<")"<<"+"<<w<<"=24"<<endl;if (x/(y-z/w)==24) cout<<x<<"/"<<"("<<y<<"-"<<z<<"/"<<w<<")"<<"=24"<<endl;if (x+(y-z)*w==24) cout<<x<<"+"<<"("<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;if ((x+y+z)*w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl; if ((x+y+z)*w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl; if (x+y*z-w==24) cout<<x<<"+"<<y<<"*"<<z<<"-"<<w<<"=24"<<endl; if (x*y-z/w==24) cout<<x<<"*"<<y<<"-"<<z<<"/"<<w<<"=24"<<endl; if ((x+y)*z-w==24) cout<<"("<<x<<"+"<<y<<"*"<<z<<"-"<<w<<"=24"<<endl; if ((x-y/z)*w==24) cout<<"("<<x<<"-"<<y<<"/"<<z<<")*"<<w<<"=24"<<endl; if (x*(y+z)+w==24) cout<<x<<"*"<<"("<<y<<"+"<<z<<")"<<"+"<<w<<"=24"<<endl;if ((x*y)+(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;if ((x*y)/z-w==24) cout<<"("<<x<<"*"<<y<<")/"<<z<<"-"<<w<<"=24"<<endl; if ((x+y/z)*w==24) cout<<"("<<x<<"+"<<y<<"/"<<z<<")*"<<w<<"=24"<<endl; if ((x*y*z)/w==24) cout<<"("<<x<<"*"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl;if ((x+y*z)/w==24) cout<<"("<<x<<"+"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl;if (x+(y*z)+w==24) cout<<x<<"+"<<"("<<y<<"*"<<z<<")+"<<w<<"=24"<<endl;if (x-(y+z)*w==24) cout<<x<<"-("<<y<<"+"<<z<<")*"<<w<<"=24"<<endl;if (x-(y-z)*w==24) cout<<x<<"-("<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;if ((x*y)-z-w==24) cout<<"("<<x<<"*"<<y<<")-"<<z<<"-"<<w<<"=24"<<endl;if (x+y/z+w==24) cout<<x<<"+"<<y<<"/"<<z<<"+"<<w<<"=24"<<endl;if ((x-y)*z-w==24) cout<<"("<<x<<"-"<<y<<"*"<<z<<"-"<<w<<"=24"<<endl;if ((x+y)/z+w==24) cout<<"("<<x<<"+"<<y<<"/"<<z<<"+"<<w<<"=24"<<endl;if ((x*y)+z-w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"-"<<w<<"=24"<<endl;if ((x/y)+z+w==24) cout<<"("<<x<<"/"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;if ((x*y)*z-w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")-"<<w<<"=24"<<endl;if ((x*y+z)/w==24) cout<<"("<<x<<"*"<<y<<"+"<<z<<")/"<<w<<"=24"<<endl;if (x+y+z*w==24) cout<<x<<"+"<<y<<"+"<<z<<"*"<<w<<"=24"<<endl;if (x*(y-z)/w==24) cout<<x<<"*"<<"("<<y<<"-"<<z<<")/"<<w<<"=24"<<endl;if (x/y*z+w==24) cout<<x<<"/"<<y<<"*"<<z<<"+"<<w<<"=24"<<endl;if (x+y*z*w==24) cout<<x<<"+"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl;if (x+y+z+w==24) cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;if ((x*y)/(z*w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"*"<<w<<")"<<"=24"<<endl; if (x+(y+z)*w==24) cout<<x<<"+("<<y<<"+"<<z<<")*"<<w<<"=24"<<endl; if ((x-y)*z+w==24) cout<<"("<<x<<"-"<<y<<"*"<<z<<"+"<<w<<"=24"<<endl; if ((x+y+z)/w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")/"<<w<<"=24"<<endl; if ((x+y)*z+w==24) cout<<"("<<x<<"+"<<y<<")*"<<z<<"+"<<w<<"=24"<<endl; if ((x*y)*z+w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")+"<<w<<"=24"<<endl; if ((x*y)-(z-w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"-"<<w<<")"<<"=24"<<endl;if ((x*y)-(z+w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"+"<<w<<")"<<"=24"<<endl; if ((x-y-z)*w==24) cout<<"("<<x<<"-"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl; if ((x*y)/z+w==24) cout<<"("<<x<<"*"<<y<<")/"<<z<<"+"<<w<<"=24"<<endl; if ((x+y-z)*w==24) cout<<"("<<x<<"+"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl; if (x/(y/z-w)==24) cout<<x<<"/("<<y<<"/"<<z<<"-"<<w<<")=24"<<endl; if ((x*y)-(z*w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"*"<<w<<")"<<"=24"<<endl; //else //cout<<"不可以组成24"<<endl; return 0; }最终效果图
0 0
- 实现24点游戏-穷举法
- 24点游戏-穷举破解
- 24点游戏:java的一种穷举实现
- 基于穷举法的24点游戏算法(tcl版本)
- 24点|穷举法【待续】
- 数据结构和算法设计专题之---24点游戏(穷举法和递归法)
- 24点问题(穷举法/C++)
- C_穷举法:求24点
- 【JAVA】24点 递归穷举
- 用穷举法列出24点的解
- C++实现24点游戏
- C++实现24点游戏
- 凑24点游戏实现
- Python实现24点游戏
- 穷举法:填运算符游戏
- java 用栈的原理(穷举)实现迷宫游戏
- 24点游戏 c语言的实现
- 经典游戏,计算24点,简单实现
- 今日头条2017春招研发岗笔试题——Paragraph
- POJ
- Android之冷启动和热启动,以及代码
- MySql基础
- C# 消息处理学习总结
- 实现24点游戏-穷举法
- 抽象类、抽象方法和内部类
- 移动端开发-WebApp-淘宝商城(响应式布局:任何手机屏幕尺寸自适应)
- android 蓝牙4.0开--发关于BLE和iBeacon的一些笔记
- linux中nm、ldd、readelf命令
- 标准C++中的string类的用法
- 密码学之Padding
- Ubuntu 修改分辨率
- c#中的协变性与逆变性,Part Three:方法组转换的可变性