/*
name:24点游戏
Author:田野
Date:2018.9.27
*/
#include
#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(xy-z+w==24)
cout<<x<<""<<y<<"-"<<z<<"+"<<w<<"=24"<<endl;
if ((x-y)zw24)
cout<<"("<<x<<"-"<<y<<")"<<""<<z<<""<<w<<"=24"<<endl;
if ((xy)+(zw)24)
cout<<"("<<x<<""<<y<<")+("<<z<<""<<w<<")"<<"=24"<<endl;
if ((x+y)zw24)
cout<<"("<<x<<"+"<<y<<")"<<""<<z<<""<<w<<")"<<"=24"<<endl;
if (xyz*w24)
cout<<x<<""<<y<<""<<z<<""<<w<<"=24"<<endl;
if ((x+yz)w==24)
cout<<"("<<x<<"+"<<y<<""<<z<<")"<<""<<w<<"=24"<<endl;
if ((xy-z)w==24)
cout<<"("<<x<<""<<y<<"-"<<z<<")"<<""<<w<<"=24"<<endl;
if ((xy)+z+w24)
cout<<"("<<x<<"*"<<y<<")+"<<z<<"+"<<w<<"=24"<<endl;
if ((x/y-z)*w24)
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-yz)*w24)
cout<<"("<<x<<"-"<<y<<""<<z<<")"<<""<<w<<"=24"<<endl;
if (x*(y-z)+w24)
cout<<x<<"*"<<"("<<y<<"-"<<z<<")"<<"+"<<w<<"=24"<<endl;
if (x+y+z/w24)
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 (xy/(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)/w24)
cout<<x<<"+"<<"("<<y<<"+"<<z<<")"<<"/"<<w<<"=24"<<endl;
if (xy/(z+w)==24)
cout<<x<<""<<y<<"/"<<z<<"+"<<w<<")"<<"=24"<<endl;
if ((x+y)*z/w24)
cout<<"("<<x<<"+"<<y<<")"<<z<<"/"<<w<<"=24"<<endl;
if ((xy+z)w==24)
cout<<"("<<x<<""<<y<<"+"<<z<<")"<<""<<w<<"=24"<<endl;
if ((xy-z)/w24)
cout<<"("<<x<<"*"<<y<<"-"<<z<<")"<<"/"<<w<<"=24"<<endl;
if ((x/y+z)*w24)
cout<<"("<<x<<"/"<<y<<"+"<<z<<")"<<""<<w<<"=24"<<endl;
if ((xy)/z/w24)
cout<<"("<<x<<"*"<<y<<")/"<<z<<"/"<<w<<"=24"<<endl;
if (x+y+z-w24)
cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;
if (x-(y-z)+w24)
cout<<x<<"-"<<"("<<y<<"-"<<z<<")"<<"+"<<w<<"=24"<<endl;
if (x/(y-z/w)24)
cout<<x<<"/"<<"("<<y<<"-"<<z<<"/"<<w<<")"<<"=24"<<endl;
if (x+(y-z)*w24)
cout<<x<<"+"<<"("<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
if ((x+y+z)*w24)
cout<<"("<<x<<"+"<<y<<"+"<<z<<")"<<w<<"=24"<<endl;
if ((x+y+z)w==24)
cout<<"("<<x<<"+"<<y<<"+"<<z<<")"<<w<<"=24"<<endl;
if (x+yz-w24)
cout<<x<<"+"<<y<<""<<z<<"-"<<w<<"=24"<<endl;
if (xy-z/w24)
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)+w24)
cout<<x<<""<<"("<<y<<"+"<<z<<")"<<"+"<<w<<"=24"<<endl;
if ((xy)+(z/w)24)
cout<<"("<<x<<""<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;
if ((xy)/z-w24)
cout<<"("<<x<<"*"<<y<<")/"<<z<<"-"<<w<<"=24"<<endl;
if ((x+y/z)*w24)
cout<<"("<<x<<"+"<<y<<"/"<<z<<")"<<w<<"=24"<<endl;
if ((xyz)/w==24)
cout<<"("<<x<<""<<y<<""<<z<<")/"<<w<<"=24"<<endl;
if ((x+yz)/w24)
cout<<"("<<x<<"+"<<y<<""<<z<<")/"<<w<<"=24"<<endl;
if (x+(yz)+w24)
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 ((xy)-z-w24)
cout<<"("<<x<<"*"<<y<<")-"<<z<<"-"<<w<<"=24"<<endl;
if (x+y/z+w24)
cout<<x<<"+"<<y<<"/"<<z<<"+"<<w<<"=24"<<endl;
if ((x-y)z-w==24)
cout<<"("<<x<<"-"<<y<<""<<z<<"-"<<w<<"=24"<<endl;
if ((x+y)/z+w24)
cout<<"("<<x<<"+"<<y<<"/"<<z<<"+"<<w<<"=24"<<endl;
if ((x*y)+z-w24)
cout<<"("<<x<<""<<y<<")+"<<z<<"-"<<w<<"=24"<<endl;
if ((x/y)+z+w==24)
cout<<"("<<x<<"/"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;
if ((xy)z-w==24)
cout<<"("<<x<<""<<y<<")("<<z<<")-"<<w<<"=24"<<endl;
if ((xy+z)/w24)
cout<<"("<<x<<""<<y<<"+"<<z<<")/"<<w<<"=24"<<endl;
if (x+y+zw24)
cout<<x<<"+"<<y<<"+"<<z<<""<<w<<"=24"<<endl;
if (x(y-z)/w24)
cout<<x<<""<<"("<<y<<"-"<<z<<")/"<<w<<"=24"<<endl;
if (x/yz+w24)
cout<<x<<"/"<<y<<""<<z<<"+"<<w<<"=24"<<endl;
if (x+yzw==24)
cout<<x<<"+"<<y<<""<<z<<""<<w<<"=24"<<endl;
if (x+y+z+w==24)
cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;
if ((xy)/(zw)==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)/w24)
cout<<"("<<x<<"+"<<y<<"+"<<z<<")/"<<w<<"=24"<<endl;
if ((x+y)*z+w24)
cout<<"("<<x<<"+"<<y<<")"<<z<<"+"<<w<<"=24"<<endl;
if ((xy)z+w==24)
cout<<"("<<x<<""<<y<<")("<<z<<")+"<<w<<"=24"<<endl;
if ((xy)-(z-w)==24)
cout<<"("<<x<<""<<y<<")-("<<z<<"-"<<w<<")"<<"=24"<<endl;
if ((xy)-(z+w)==24)
cout<<"("<<x<<""<<y<<")-("<<z<<"+"<<w<<")"<<"=24"<<endl;
if ((x-y-z)w==24)
cout<<"("<<x<<"-"<<y<<"-"<<z<<")"<<w<<"=24"<<endl;
if ((xy)/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 ((xy)-(zw)==24)
cout<<"("<<x<<""<<y<<")-("<<z<<""<<w<<")"<<"=24"<<endl;
else
cout<<" "<<endl;
return 0;
}
穷举法就是列出4个数字加减乘除的各种可能性。首先我们将4个数设为a,b,c,d,,将其排序列出四个数的所有排序序列组合(共有A44=24种组合)。再进行符号的排列表达式,其中算术符号有+,—,,/,( )。其中有效的表达式有a(b-c/b),ab-cd,等等。列出所有有效的表达式。其中a,b,c,d的范围是1到13。用随机函数产生四个1-13的数。要实现24点的算法,就是通过4个数字,4个运算符号和2对括号(最多为2对),通过各种组合判断其结果是否为24。我们用a,b,c,d代替4个数字。考虑每种可能,总的算法就有7种可能。
1没括号的(形如abc*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)。
实现24点游戏我使用的是穷举法,所以最主要的就是将所有的情况一一列举出来,首先得列出四个数字的排列组合序列,然后在进行对运算符的排列,在这个过程中情况较多比较繁琐,也很有可能缺少几种情况或者多出来几个,但是最终的结果应该是正确的。