7-13 大家一起来玩游戏 (20 分)

7-13 大家一起来玩游戏 (20 分)

24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。
24点通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1~10这40张牌),任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3或3×8÷(9-8)或(9-8÷8)×3等。比如 1 5 5 5,算式为
5*(5-(1/5));

输入格式:
第一行输入n,表示n组测试数据,后面n行,每一行输入4个1-10的数字。[数字允许重复,测试用例保证无异常数字]

输出格式:
每组测试数据如果可以满足24点,则输出True,否则输出False,空格间隔后输出下一组结果,所有输出只占一行(行末无多余空格)。

输入样例:

2
1 5 5 5
5 1 1 1

输出样例:

True False

思路: 由题目可知,会出现6种情况
1 a+b
2 a-b
3 a*b
4 a/b
5 b-a
6 b/a
那么在搜索时使用这六种即可

代码:

#include <iostream>
#include<string.h>
using namespace std;
double a[10];
int n,vis[10],flag=0;
void dfs(double x,int deep)
{
    if(deep>=4)    ///当四张牌都用过时,判断是否达到24点
    {
        if(x==24)
            flag=1;
        return;
    }
    for(int i=0; i<4; i++)            ///六种情况
    {
        if(vis[i]==0)
        {
            vis[i]=1;
            dfs(x+a[i],deep+1);
            dfs(x-a[i],deep+1);
            dfs(x*a[i],deep+1);
            dfs(x/a[i],deep+1);
            dfs(a[i]-x,deep+1);
            dfs(a[i]/x,deep+1);
            vis[i]=0;
        }
    }
}
int main()
{
    cin>>n;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<4; j++)
            cin>>a[j];
        flag=0;                        ///每次循环都将flag、vis置为0
        memset(vis,0,sizeof(vis));
        for(int i=0; i<4; i++)
        {
            vis[i]=1;
            dfs(a[i],1);
            vis[i]=0;
        }
        if(i>0)
            cout<<' ';
        if(flag==0)
            cout<<"False";
        else
            cout<<"True";
    }
}

202204161103六

  • 4
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

白—

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值