外站题60求助
  • 板块题目总版
  • 楼主Lytnsmh
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/6/26 08:04
  • 上次更新2023/10/27 22:33:59
查看原帖
外站题60求助
537146
Lytnsmh楼主2022/6/26 08:04
题目描述
在扑克牌的众多玩法中,算24是一种极有意义的玩法。玩家们从整副牌中随意抽出四张牌,然后用+、-、×、÷将这四张牌(每张牌必须被且只能被使用一次)上的点数组成一个算式(任意步骤结果都必须是整数),要求所得到的算式的结果为24。最快找出正确的算式的玩家胜出。现在请你用计算机编程用所给牌点算24(只要给出一个符合条件的算式即可)。
输入
共一行,包含四个用空格隔开的自然数(1~13),代表四张牌各自的牌点。
输出
有若干行,每行一个算式,代表运算的一个步骤(参与运算的两个数字大数在前小数在后,参考样例),若无解则输出“No Answer!”。
样例输入 Copy
1 2 4 4
样例输出 Copy
2+1=3
4+4=8
8*3=24
```cpp
#include<bits/stdc++.h>
#include<stdlib.h> 
#define ll long long
using namespace std;
ll a[10],ans,l[5];
char test[4]={'+','-','*','/'};
bool w=0;
void dfs3(ll p1,char a,ll p2,char b,ll p3,char c,ll p4)
{
	ll a1=p1,a2=p2,a3=p3,a4=p4,q=0,e=0;
	char ae=a,br=b,cs=c;
	ll s=0;
	if(a=='+')
	 {
	 	s=p1+p2;	 a='0';q=s;
	 } 
	 if(a=='-')
	 {
	 	s=p1-p2;	 a='0';q=s;
	 } 
	 if(a=='*')
	 {
	 	s=p1*p2;	 a='0';q=s;
	 } 
	 if(a=='/'&&p1%p2==0)
	 {
	 	s=p1/p2;	 a='0';q=s;
	 } 
	 if(b=='+')
	 {
	 	s=s+p3;	 b='0';e=s;
	 } 
	 if(b=='-')
	 {
	 	s=s-p3;	 b='0';e=s;
	 } 
	 if(b=='*')
	 {
	 	s=s*p3;	 b='0';e=s;
	 } 
	 if(b=='/'&&s%p3==0)
	 {
	 	s=s/p3;	 b='0';e=s;
	 } 
	 if(c=='+')
	 {
	 	s=s+p4;	 c='0';
	 } 
	 if(c=='-')
	 {
	 	s=s-p4;	 c='0';
	 } 
	 if(c=='*')
	 {
	 	s=s*p4;	 c='0';
	 } 
	 if(c=='/'&&s%p4==0)
	 {
	 	s=s/p4;	 c='0';
	 } 
	 if(s==24&&a=='0'&&b=='0'&&c=='0')
	  {
	  	cout<<p1<<ae<<p2<<"="<<q<<endl;
	  	cout<<q<<br<<p3<<"="<<e<<endl;;
	  	cout<<e<<cs<<p4<<"=24";
	  	exit(0);
	  	w=1;
	  }
}
void dfs2(ll p1,ll p2,ll p3,ll p4)
{
	for(int i=0;i<=3;i++)
	 {
	 	for(int j=0;j<=3;j++)
	 	 {
	 	 	for(int k=0;k<=3;k++)
	 	 	 {
	 	 	   dfs3(p1,test[i],p2,test[j],p3,test[k],p4);
	 	 	 }
	 	 }
	 }
}
void dfs1(ll p1,ll p2,ll p3,ll p4)
{
	dfs2(p1,p2,p3,p4); 
    dfs2(p1,p2,p4,p3);
    dfs2(p1,p3,p2,p4);
    dfs2(p1,p3,p4,p2);
    dfs2(p1,p4,p2,p3);
    dfs2(p1,p4,p3,p2);
    dfs2(p2,p1,p3,p4);
    dfs2(p2,p1,p4,p3);
    dfs2(p2,p3,p1,p4);
    dfs2(p2,p3,p4,p1);
    dfs2(p2,p4,p1,p3);
    dfs2(p2,p4,p3,p1);
    dfs2(p3,p2,p1,p4);
    dfs2(p3,p2,p4,p1);
    dfs2(p3,p1,p2,p4);
    dfs2(p3,p1,p4,p2);
    dfs2(p3,p4,p2,p1);
    dfs2(p3,p4,p1,p2);
    dfs2(p4,p2,p3,p1);
    dfs2(p4,p2,p1,p3);
    dfs2(p4,p3,p2,p1);
    dfs2(p4,p3,p1,p2);
    dfs2(p4,p1,p2,p3);
    dfs2(p4,p1,p3,p2);
}
int main()
{
	cin>>a[1]>>a[2]>>a[3]>>a[4];
	dfs1(a[1],a[2],a[3],a[4]);
	 	cout<<"No Answer! ";
	return 0;
}
2022/6/26 08:04
加载中...