24点游戏是经典的纸牌益智游戏

24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复
程序流程图:在这里插入图片描述
源代码:

#include <iostream>
#include <string>
using namespace std;
int number=0;
string sss[5000];
float cal(float a,float b,int p)
{
	switch(p)
	{
	case 1:return a+b;
	case 2:return a-b;
    case 3:return a*b;
    case 4:return a/b;
    case 5:return b-a;
    case 6:return b/a;
	}
}
string link(string a,string b,int p)
{
	string st=a;
	switch(p)
	{
	case 1:st+=("+"+b);break;
    case 2:st+=("-"+b);break;
    case 3:st+=("*"+b);break;
    case 4:st+=("/"+b);break;
    case 5:st=b+"-"+st;break;
    case 6:st=b+"/"+st;break;
	}
	st="("+st+")";
	return st;
}
void putout1(string c[],int p[])
{
	string st;
	st=link(c[1],c[2],p[1]);
	st=link(st,c[3],p[2]);
    st=link(st,c[4],p[3]);
    st=st.erase(0,1);
    st=st.erase(st.length()-1,1);
    number++;
    sss[number]=st;
}
void putout2(string c[],int p[])
{
	string st1,st2,st;
    st1=link(c[1],c[2],p[1]);
    st2=link(c[3],c[4],p[3]);
    st=link(st1,st2,p[2]);
    st=st.erase(0,1);
    st=st.erase(st.length()-1,1);
    number++;
    sss[number]=st;
}
void suan(float a[],string c[])
{
	int p[4];int i;float sum,sum1,sum2;
    for(p[1]=1;p[1]<=6;p[1]++)
    for(p[2]=1;p[2]<=6;p[2]++)
    for(p[3]=1;p[3]<=6;p[3]++)
	{
		sum=cal(a[1],a[2],p[1]);
        sum=cal(sum,a[3],p[2]);
        sum=cal(sum,a[4],p[3]);
		if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) putout1(c,p);
		sum1=cal(a[1],a[2],p[1]);
        sum2=cal(a[3],a[4],p[3]);
        sum=cal(sum1,sum2,p[2]);
		if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) putout2(c,p);
	}
}
void disorder(float a[],string c[])
{
	float b[5];
    string d[5];
    int i,j,k,l;
	for(i=1;i<=4;i++)
		for(j=1;j<=4;j++)
		{
			if(j==i)continue;
			for(k=1;k<=4;k++)
			{
				if(k==i||k==j)continue;
				for(l=1;l<=4;l++)
				{
					if(l==i||l==j||l==k)continue;
					b[1]=a[i];b[2]=a[j];b[3]=a[k];b[4]=a[l];
					d[1]=c[i];d[2]=c[j];d[3]=c[k];d[4]=c[l];
					suan(b,d);
				}
			}
		}
}
int main()
{
	cout<<"请输入四个数字";
    float a[5];
    int i,j;
    string c[5];
    for(i=1;i<=4;i++){cin>>a[i];
	if(a[i]==10)c[i]="10" ;
	else c[i]=int(a[i])+'0';}
    disorder(a,c);
    int v=1,u=0;
	for(i=1;i<=number;i++)
	{
	 v=1;for(j=1;j<i;j++)if(sss[i]==sss[j])v=0;
     if(v==1){cout<<sss[i]<<endl;u=1;}}
     if(u==0)cout<<"无解"<<endl;
     system("pause");
 return 0;
}

结果截屏:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/foxANDbee/article/details/82891765