24点游戏

@[24点游戏]在这里插入代码片
#include
#include
#include
using namespace std;
bool list_24(int,int,int,int);
int cal(int,int,int,int,int,int,int);
char m[4]={’+’,’-’,’*’,’/’};
string p[4];

void main(){
int a[4];
string s;
string word;
int i=0;
getline(cin,s);
istringstream is(s);
while(is>>word)
{
if(word==“joker”||word==“JOKER”)
{
cout<<“ERROR”;
break;
}
else if(word==“J”)
a[i]=11;

	else if(word=="Q")
		a[i]=12;	
	
	else if(word=="K")
		a[i]=13;		
	
	else if(word=="A")
		a[i]=1;			
	
	else 
		a[i]=atoi(word.c_str());		
	
	p[i]=word;
	i++;
}

list_24(a[0],a[1],a[2],a[3]);
if(list_24(a[0],a[1],a[2],a[3])==false){
cout<<“您输入值无法得到24!”;
}
}

int cal(int a,int b,int c,int d,int i,int j,int k)
{
int sum=0;
if(i0)
sum=a+b;
else if(i
1)
sum=a-b;
else if(i2)
sum=a*b;
else if(i
3)
{
if(a%b0)
sum=a/b;
else
return 0;
}
if(j
0)
sum+=c;
else if(j1)
sum-=c;
else if(j
2)
sum*=c;
else if(j3)
{
if(sum%c
0)
sum/=c;
else
return 0;
}
if(k0)
sum+=d;
else if(k
1)
sum-=d;
else if(k2)
sum*=d;
else if(k
3)
{
if(sum%d==0)
sum/=d;
else
return 0;
}
return sum;
}

bool list_24(int a,int b,int c,int d){
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
{
if(cal(a,b,c,d,i,j,k)==24)
{

				cout<<p[0]<<m[i]<<p[1]<<m[j]<<p[2]<<m[k]<<p[3]<<endl;
				return true;
			}
			else if(cal(a,b,d,c,i,j,k)==24)
			{
				cout<<p[0]<<m[i]<<p[1]<<m[j]<<p[3]<<m[k]<<p[2]<<endl;
				return true;
			}
			else if(cal(a,c,b,d,i,j,k)==24)
			{
				cout<<p[0]<<m[i]<<p[2]<<m[j]<<p[1]<<m[k]<<p[3]<<endl;
				return true;
			}
			else if(cal(a,c,d,b,i,j,k)==24)
			{
				cout<<p[0]<<m[i]<<p[2]<<m[j]<<p[3]<<m[k]<<p[1]<<endl;
				return true;
			}
			else if(cal(a,d,b,c,i,j,k)==24)
			{
				cout<<p[0]<<m[i]<<p[3]<<m[j]<<p[1]<<m[k]<<p[2]<<endl;
				return true;
			}
			else if(cal(a,d,c,b,i,j,k)==24)
			{
				cout<<p[0]<<m[i]<<p[3]<<m[j]<<p[2]<<m[k]<<p[1]<<endl;
				return true;
			}
			else if(cal(b,a,c,d,i,j,k)==24)
			{
				cout<<p[1]<<m[i]<<p[0]<<m[j]<<p[2]<<m[k]<<p[3]<<endl; 
				return true;
			}
            else if(cal(b,a,d,c,i,j,k)==24)
			{
				cout<<p[1]<<m[i]<<p[0]<<m[j]<<p[3]<<m[k]<<p[2]<<endl;
				return true;
			}
			else if(cal(b,c,a,d,i,j,k)==24)
			{
				cout<<p[1]<<m[i]<<p[2]<<m[j]<<p[0]<<m[k]<<p[3]<<endl;
				return true;
			}
			else if(cal(b,c,d,a,i,j,k)==24)
			{
				cout<<p[1]<<m[i]<<p[2]<<m[j]<<p[3]<<m[k]<<p[0]<<endl;
				return true;
				
			}
			else if(cal(b,d,a,c,i,j,k)==24)
			{
				cout<<p[1]<<m[i]<<p[3]<<m[j]<<p[0]<<m[k]<<p[2]<<endl;
				return true;
			}
			else if(cal(b,d,c,a,i,j,k)==24)
			{
				cout<<p[1]<<m[i]<<p[3]<<m[j]<<p[2]<<m[k]<<p[0]<<endl;
				return true;
			}
			else if(cal(c,a,b,d,i,j,k)==24)
			{
				cout<<p[2]<<m[i]<<p[0]<<m[j]<<p[1]<<m[k]<<p[3]<<endl;
				return true;
			}
            else if(cal(c,a,d,b,i,j,k)==24)
			{
				cout<<p[2]<<m[i]<<p[0]<<m[j]<<p[3]<<m[k]<<p[1]<<endl;
				return true;
			}
			else if(cal(c,b,a,d,i,j,k)==24)
			{
				cout<<p[2]<<m[i]<<p[1]<<m[j]<<p[0]<<m[k]<<p[3]<<endl;
				return true;
				
			}
            else if(cal(c,b,d,a,i,j,k)==24)
			{
				cout<<p[2]<<m[i]<<p[1]<<m[j]<<p[3]<<m[k]<<p[0]<<endl;
				return true;
			}
            else if(cal(c,d,a,b,i,j,k)==24)
			{
				cout<<p[2]<<m[i]<<p[3]<<m[j]<<p[0]<<m[k]<<p[1]<<endl;
				
			}
            else if(cal(c,d,b,a,i,j,k)==24)
			{
				cout<<p[2]<<m[i]<<p[3]<<m[j]<<p[1]<<m[k]<<p[0]<<endl;
				return true;
				
			}
            else if(cal(d,a,b,c,i,j,k)==24)
			{
				cout<<p[3]<<m[i]<<p[0]<<m[j]<<p[1]<<m[k]<<p[2]<<endl;
				return true;
			
			}
            else if(cal(d,a,c,b,i,j,k)==24)
			{
				cout<<p[3]<<m[i]<<p[0]<<m[j]<<p[2]<<m[k]<<p[1]<<endl;
				return true;
				
			}
            else if(cal(d,b,a,c,i,j,k)==24)
			{
				cout<<p[3]<<m[i]<<p[1]<<m[j]<<p[0]<<m[k]<<p[2]<<endl;
				return true;
			}
            else if(cal(d,b,c,a,i,j,k)==24)
			{
				cout<<p[3]<<m[i]<<p[1]<<m[j]<<p[2]<<m[k]<<p[0]<<endl;
			    return true;
			}
            else if(cal(d,c,a,b,i,j,k)==24)
			{
				cout<<p[3]<<m[i]<<p[2]<<m[j]<<p[0]<<m[k]<<p[1]<<endl;
			    return true;
			}
            else if(cal(d,c,b,a,i,j,k)==24)
			{
				cout<<p[3]<<m[i]<<p[2]<<m[j]<<p[1]<<m[k]<<p[0]<<endl;
				return true;
			}				
		}
	return false;

}

基本思想:
运用穷举法的方法进行列举各种表达式。即通过改变纸牌参数的顺序来避免括号的使用。
运行结果:
在这里插入图片描述
在这里插入图片描述

问题一 字串变换 描述: 已知有两个字串 A, B 及一组字串变换的规则: A1 -> B1 A2 -> B2 规则的含义为:在 A中的子串 A1 可以变换为 B1、A2 可以变换为 B2 … 例如:A='abcd' B='xyz' 变换规则为: ‘abc’ -> ‘xu’ ‘ud’ -> ‘y’ ‘y’ -> ‘yz’ 则此时,A 可以经过一系列的变换变为 B,其变换的过程为: ‘abcd’ -> ‘xud’ -> ‘xy’ -> ‘xyz’ 共进行了三次变换,使得 A 变换为B。 现在的问题是:对于给定的A,B 及一组字串变换的规则,若A能在10步内(包含10步)变换成B,则输出所需的最短变换步数,否则输出NO ANSWER。 数据范围: 字串A,B长度小于等于20 规则总数小于等于6 输入格式: 从文件convert.in读入 第一行为两个字符串,第二行至文件尾为变换规则 变换规则一行为两个字符串A1 B1用空格分隔,表示 A1 -> B1 A B A1 B1 A2 B2 ... ... 输出格式: 输出到convert.out中 当变换步数在10步(包含10步)内,那么输出这个数字 否则,输出”NO ANSWER" 特别提醒: 这道题目很像WordLadder,用BFS也更为方便。但是,Lab2的主题是递归,所以大家这道题目不允许用BFS,必须是递归形式的。 对于每个测试用例,时间限制为1秒,实在不行,2秒也能接受。 规则没有优先级,所有的规则都是平等的,没有优先顺序。 可能会同时出现 a -> b a -> c这样的规则,就是说a可以转换成b,也可以转换成c。 问题二 24点 描述: 几十年前全世界流行一种叫作“算24点”数字扑克游戏。作为游戏者将得到4个1-13(在扑克牌里用A代替1,J代替11,Q代替12,K代替13)之间的自然数作为操作数,并对这四个数进行适当的算术运算(加,减,乘,除)使得最后结果为24。 例如: 4个数字为3 8 10 Q 那么一个方案可以是Q * ( 10 / ( 8-3 ) ) = 24 现在你的任务是实现一个自动24点计算器,对于任意的4个1-13的自然数,如果可以算出24点则输出一个合理方案,若无解则输出“NO ANSWER”。 数据范围: 4个数字属于S={1,2,3,4,5,6,7,8,9,10,J,Q,K} J,Q,K为字符 输入格式: 从文件calculator.in读入 一行4个数字,以空格分隔 输出格式: 输出到文件calculator.out中 一个字符串,表示最后的运算方案,符号与数字之间、符号与符号之间用空格分隔 如Q * ( 10 / ( 8 - 3 ) ) = 24 (Q与*之间有空格,(与10之间有空格) 或者当没有可行方案时输出“NO ANSWER"。 特别提醒: 这道题目还是用递归。 表达式中的每个子表达式的结果可以是小数,即例如 (3+3/7)*7=24 是合法的。 去除多余的括号。例如,对于2 2 3 8 这四个数字,一个解可以是3 * ( ( 8 + 2 ) - 2 ),但是要求是去除多余的括号,即最后的结果应该是3 * ( 8 + 2 - 2)。就是说,可以不用的括号都要去掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值