HJ67 24点游戏算法

24点(给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利) 实现函数 int is_find = 0; void dfs(double *arr,double temp,int dep){ if(dep == (sizeof(arr)) && is_find==0 &&temp ==24){ is_find = 1; }else{ if(dep < sizeof(ar... 阅读详情
描述
问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。
输出:

true or false

本题含有多组样例输入。
输入描述:
输入4个int整数

输出描述:
返回能否得到24点,能输出true,不能输出false

示例1
输入:
7 2 1 10
复制
输出:
true

除法要判断是否有一方为0,有的话直接返回结果是0即可
出发还要判断是否整除,不能的话本步直接失败

#include <stdio.h>

#if 0
#define dbg printf
#else
#define dbg 
#endif

int compute(int a, int b, int i)
{
    switch (i)
    {
        case 0:
            return a+b;
            break;
        case 1:
            return a-b;
            break;
        case 2:
            return b-a;
            break;
        case 3:
            return a*b;
            break;
        case 4:
            // 注意出发要判断能够整除,若四个数运算最终可以得到整数,此处跳过不影响,在别的路上会有判定
            // 不能完成的算式返回一个这两个数之间能实现的结果
            // 虽然输入的四个数不可能是0,但是中间数可能是0,所以仍要判断出法非0
            if(b==0 || a%b!=0)
            {
                return a+b;
            }
            else
            {
                return a/b;
            }
            break;
        case 5:
            if(a==0 || b%a!=0)
            {
                return a+b;
            }
            else
            {
                return b/a;
            }
            break;
    }
    
    return 0;
}
int judge_2(int a, int b)
{
    int i;
    for(i=0; i<6; i++)
    {
        if(compute(a, b, i) == 24)
        {
            dbg("(%d):a=%d, b=%d, i=%d\n", __LINE__, a, b, i);
            return 1;
        }
    }
    dbg("(%d):a=%d, b=%d, i=%d\n", __LINE__, a, b, i);
    return 0;
}

int judge_3(int a, int b, int c)
{
    int i;
    for(i=0; i<6; i++)
    {
        if(judge_2(compute(a, b, i), c) == 1)
        {
            dbg("(%d):a=%d, b=%d, c=%d, i=%d\n", __LINE__, a, b, c, i);
            return 1;
        }
        if(judge_2(compute(a, c, i), b) == 1)
        {
            dbg("(%d):a=%d, b=%d, c=%d, i=%d\n", __LINE__, a, b, c, i);
            return 1;
        }
        if(judge_2(compute(c, b, i), a) == 1)
        {
            dbg("(%d):a=%d, b=%d, c=%d, i=%d\n", __LINE__, a, b, c, i);
            return 1;
        }
    }
    dbg("(%d):a=%d, b=%d, c=%d, i=%d\n", __LINE__, a, b, c, i);
    return 0;
}

int judge_4(int *a)
{
    int i;
    for(i=0; i<6; i++)
    {
        if(judge_3(compute(a[0], a[1], i), a[2], a[3]) == 1)
        {
            dbg("(%d):a0=%d, a1=%d, a2=%d, a3=%d\n", __LINE__, a[0], a[1], a[2], a[3]);
            return 1;
        }
        if(judge_3(compute(a[0], a[2], i), a[1], a[3]) == 1)
        {
            dbg("(%d):a0=%d, a1=%d, a2=%d, a3=%d\n", __LINE__, a[0], a[1], a[2], a[3]);
            return 1;
        }
        if(judge_3(compute(a[0], a[3], i), a[2], a[1]) == 1)
        {
            dbg("(%d):a0=%d, a1=%d, a2=%d, a3=%d\n", __LINE__, a[0], a[1], a[2], a[3]);
            return 1;
        }
        if(judge_3(compute(a[2], a[1], i), a[0], a[3]) == 1)
        {
            dbg("(%d):a0=%d, a1=%d, a2=%d, a3=%d\n", __LINE__, a[0], a[1], a[2], a[3]);
            return 1;
        }
        if(judge_3(compute(a[3], a[1], i), a[2], a[0]) == 1)
        {
            dbg("(%d):a0=%d, a1=%d, a2=%d, a3=%d\n", __LINE__, a[0], a[1], a[2], a[3]);
            return 1;
        }
        if(judge_3(compute(a[2], a[3], i), a[1], a[0]) == 1)
        {
            dbg("(%d):a0=%d, a1=%d, a2=%d, a3=%d\n", __LINE__, a[0], a[1], a[2], a[3]);
            return 1;
        }
    }
    
    return 0;
}
int main(void)
{
    int a[4];
    int i;
    
    memset(a, 0, sizeof(a));
    while(scanf("%d", &a[0]) != EOF)
    {
        for(i=1; i<4; i++)
        {
            scanf("%d", a+i);
        }
        if(judge_4(a) == 1)
        {
            printf("true\n");
        }
        else
        {
            printf("false\n");
        }
        memset(a, 0, sizeof(a));
    }
    
    return 0;
}
#include <stdio.h>
#include <string.h>

int inp[4]={0};
int flag[4]={0};

int dfs(int num)
{
    if(num==24)
        return 1;
    for(int i=0;i<4;i++)
    {
        if(flag[i]==0)
        {
            flag[i]=1;
            if(dfs(num+inp[i]))
                return 1;
            else if(dfs(num-inp[i]))
                return 1;
            else if(dfs(num*inp[i]))
                return 1;
            else if(dfs(num/inp[i]) && (num%inp[i]==0))
                return 1;
            flag[i]=0;
        }
    }
    return 0;
}

int main()
{
    while(scanf("%d %d %d %d",&inp[0],&inp[1],&inp[2],&inp[3])!=EOF)
    {
        memset(flag,0,sizeof(flag));
        if(dfs(0))
            printf("true\n");
        else
            printf("false\n");
    }
    return 0;
}
C++ 24点游戏算法 原题链接:24点游戏算法_牛客题霸_牛客网 描述 给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算 此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。 输入描述: 读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。 输出描述: 对于每组案例,输出一行表 阅读详情

相关推荐

牛客刷题 | HJ64 MP3光标位置, HJ65 查找两个字符串a,b中的最长公共子串,HJ66 配置文件恢复,HJ67 24点游戏算法

本篇关键点:1. MP3光标:设置了两个变量,分别记录当前光标指向的音乐和当前音乐在当前页中的位置。之后只要根据题目中图片说明的翻页情况分条件讨论就好。2. 使用动态规划查找公共子串,注意dp[i][j]中对应的是字符串中i-1和j-1的位置。3. 配置文件恢复:使用字典;用slice判断字符是否为指定字符的前几位(字符长度是已知的)。4. 24点:考虑括号的情况。

Huiwen18的博客 523

24点计算器问题[C++实现]

24 点游戏是一个很有意思的数字游戏,也是一道常见的算法面试题。题目是这样的:任给四个数(为了便于人们心算或口算,一般都是小于 10 的数),对四个数字用各种组合进行加、减、乘、除四则运算,看看结果是否能等于 24?对于面试题来说,这是一个典型的穷举类型算法问题。这个题目比较有意思的地方是它除了要对数字组合进行枚举,还要对四个运算符进行组合。我们要介绍的方法有点特殊,它没有简单地使用穷举遍历,而...

KongJHong的博客 4731

华为od机考真题-HJ67-24点游戏算法(中等)

华为od机考真题

VAN 288

24点游戏算法(c++每日一练)

问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字] 输出: trueorfalse #include<iostream> #include<vector> using namespace std; bool is(vector<float>a, int num, int key) { if (a.size() == 0) { return k..

ambiguous__的博客 5103

【牛客网华为机试】HJ67 24点游戏算法

题目 描述 问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。 输出: trueorfalse 本题含有多组样例输入。 输入描述: 输入4个int整数 输出描述: 返回能否得到24点,能输出true,不能输出false 示例1 输入: 7 2 1 10 输出: true 解题思路 (1)用递归算法进行求解 (2)每次取出列表中的第一个元素,设置目标值为2..

202xxx的博客 1242

基于ROS2系统开发机器人

以上是基于ROS 2开发机器人的基本流程和一个简单的发布者-订阅者示例。通过这个流程,你可以逐步扩展和优化你的机器人系统,实现更复杂的功能。

xuweilin的博客 1493

【华为机试】HJ67 24点游戏算法

24点游戏算法要求判断四个1-10的整数能否通过加减乘除和括号组合得到24。该问题采用递归回溯方法,枚举所有数字组合和运算符排列,通过浮点数精度控制(如1e-6误差)处理除法运算。算法核心是分治思想:每次选取两个数字进行四种运算,将结果递归处理直至只剩一个数字时与24比较。需注意交换律优化(加法乘法只需计算一次)和除零检查。示例表明如7×1×2+10=24的组合返回true,而全1组合返回false。该算法完全搜索所有可能路径,时间复杂度约为O(4^3×3!),适用于游戏开发和数学教育场景。

qq_32019341的博客 794

全新RGB-D及平面法线数据集DIODE

丰田工业大学联合芝加哥大学和北航发布全新RGB-D及平面法线数据集 DIODE (Dense Indoor and Outdoor DEpth)。

qq_43477338的博客 1539

华为机试HJ67 24点游戏算法

首先看一下题。

bingw0114的博客 1240

谷粒商城学习笔记-15-数据库初始化

这一节的主要内容是把创建对应的数据库和数据库表。

epitomizelu的专栏 1438

群晖Docker安装GitLab

external_url ‘http://lanweixia.synology.me’ 这种情况访问页面的时候加上端口没问题,但是会导致http的克隆地址没有端口。external_url ‘http://lanweixia.synology.me:8000’ 加端口的话,又会导致页面访问不了,Gitlab也一直处于启动状态。​ 完成以后修改docke—>gitlab—>config---->gitlab.rb。就是上面改的端口(docker的端口)首次进入,会设置密码,这个密码就是用户名。

Lim的博客 9098

java-HJ67_24点游戏算法

java-HJ67 24点游戏算法。

d3y1`5 81_09 296

5G Multicast/Broadcast Services(MBS) (七) MBS广播DRX

当处于RRC_IDLE或RRC_INACTIVE或RRC_CONNECTED 状态时,如果为 G-RNTI 配置了broadcast DRX,则允许MAC entity使用broadcast DRX 操作不连续地监听此G-RNTI的PDCCH;此 G-RNTI 的 drx-onDurationTimerPTM 或 drx-InactivityTimerPTM 正在运行的时间,也就是。long DRX周期drx-LongCycle-PTM和drx-StartOffset-PTM定义DRX周期开始的子帧。

asd199086的博客 391

ACM. HJ67 24点游戏算法 & 679. 24 点游戏

ACM. HJ67 24点游戏算法 & 679. 24 点游戏、回溯

chenyfan_blog 431

基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95

三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀

Coding... 2万+

一文吃透 SAP HANA SDA:把分散数据当作本地数据来用的那把钥匙

摘要:SAP HANA SDA(Smart Data Access)技术详解:150字精要 SAP HANA SDA是一种数据虚拟化技术,允许在不复制数据的情况下访问远端数据源。核心功能包括: 通过Remote Source定义连接配置 创建Virtual Table作为本地代理 支持谓词下推优化查询性能 与SDI技术协同工作扩展数据集成能力 典型应用场景包括: 跨系统联邦查询 冷热数据分层管理 混合云数据整合 远程表复制(RTR)实现近实时数据同步 实施要点: 需关注适配器能力差异 合理运用查询下推优化

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 316

HJ67 24 点游戏算法

此题允许数字重复,如 3 3 4 4 为合法输入,此输入一共有两个 3,但是每个数字只允许使用一次,则运算过程中两个 3 都被选取并进行对应的计算操作。,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算。对于每组案例,输出一行表示能否得到 24 点,能输出 true,不能输出 false。给出 4 个 1-10 的数字,通过加减乘除运算,得到数字为 24 就算胜利,读入 4 个[1,10]的整数,数字允许重复,测试用例保证无异常数字。

???的博客 128

TypeError: XGBClassifier.fit() got an unexpected keyword argument ‘early_stopping_rounds‘ 解决方案

本文主要介绍了TypeError: XGBClassifier.fit() got an unexpected keyword argument 'early_stopping_rounds’解决方案,希望能对使用XGBoost的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

华为机试HJ67:24点游戏算法

C++实现——24点游戏算法

翟天保的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

华为机试-067-中等-HJ67.24点游戏算法

【代码】华为机试-067-中等-HJ67.24点游戏算法

tttzzzqqq2018的博客 364

HJ67 24点游戏算法【python3】

牛客华为机试

Yorusimo的博客 438

牛客_华为_ HJ67 24点游戏算法

【代码】牛客_华为_ HJ67 24点游戏算法。

JStana的博客 359
上一篇: HJ66 配置文件恢复
下一篇: HJ68 成绩排序
你板子冒烟了
博客等级 码龄8年 1278粉丝 582原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值