P1149 [NOIP 2008 提高组] 火柴棒等式c/c++

P1149 [NOIP 2008 提高组] 火柴棒等式c/c++

题目描述

给你 n 根火柴棍,你可以拼出多少个形如 A+B=C 的等式?等式中的 ABC 是用火柴棍拼出的整数(若该数非零,则最高位不能是 0)。用火柴棍拼数字 0∼9 的拼法如图所示:

在这里插入图片描述

注意:

  1. 加号与等号各自需要两根火柴棍;
  2. 如果 A\=B,则 A+B=CB+A=C 视为不
    的等式(A,B,C≥0);
  3. n 根火柴棍必须全部用上。

输入格式

一个整数 n(1≤n≤24)。

输出格式

一个整数,能拼成的不同等式的数目。

输入输出样例

输入

14

输出

2

输入

18

输出

9

说明/提示

【输入输出样例 1 解释】

2 个等式为 0+1=1 和 1+0=1。

【输入输出样例 2 解释】

9 个等式为

0+4=4、0+11=11、1+10=11、2+2=4、2+7=9、4+0=4、7+2=9、10+1=11、11+0=11。

整体代码

#include <bits/stdc++.h>
using namespace std;

const int N = 1000;
int n; // 用来存储输入的目标火柴数
vector<int> arr(3); // 用来存储三个数的值
int nums[1000] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; // 存储数字0-9所需的火柴数

// 计算数字i所需的火柴数
int col(int i) {
    if (nums[i])
        return nums[i]; // 如果nums[i]已经有值,直接返回
    else {
        int sumFire = 0;
        // 对数字i进行分解,计算其组成的每个数字的火柴数
        while (i) {
            sumFire += nums[i % 10]; // i % 10得到i的最后一位数字
            i /= 10; // 更新i为除以10后的值,直到i为0
        }
        return sumFire;
    }
}

int res = 0; // 记录符合条件的数量

// 深度优先搜索函数
void dfs(int x, int sum) {
    // 如果当前火柴数已经超过n,则返回
    if (sum > n)
        return;

    // 当x超过3时,表示已经排好了三个数
    if (x > 3) {
        // 判断是否符合条件:arr[1] + arr[2] == arr[3]且火柴数之和为n
        if (arr[1] + arr[2] == arr[3] && sum == n) {
            res++; // 如果符合条件,计数加1
        }
        return;
    }
    
    // 遍历从0到999的所有数字,尝试填入arr[x]并进行递归
    for (int i = 0; i < 1000; i++) {
        arr[x] = i; // 将当前数字i填入arr[x]
        // 递归调用,更新sum为当前火柴数加上之前的sum
       	dfs(x + 1, nums[i]+ sum);
        //dfs(x + 1, col(i) + sum);
    }
}

int main() {
    cin >> n; // 输入目标火柴数
    n -= 4; // 减去4根火柴,初始条件已经预留了4根
    //这个是将计算后的数字存起来
    for(int i=10;i<=1000;i++){
    	nums[i]=nums[i/10]+nums[i%10];
	}
    dfs(1, 0); // 从第一个数开始,当前火柴数和为0
    cout << res; // 输出符合条件的组合数
    return 0;
}

解题思路

要解决这个问题,我们需要通过火柴棍的数量来形成合适的等式 A + B = C,同时遵循以下几个关键点:

  1. 火柴数限制: 每个数字的拼法需要消耗一定数量的火柴棍,而加号和等号也需要消耗火柴棍。
  2. 拼数字规则: 数字 09 的火柴数量是固定的,我们需要将它们转化成火柴棍的数量,大于的可以通过取个位数
  3. 不允许前导零: 如果数字是多位数,不能有前导零(即 01、02 等不合法)这里是i的递增来试数,数字均合理

基于这些规则,我们可以通过递归(DFS)来生成所有可能的数字组合,并判断它们是否满足条件。

解释:

  1. nums[] 数组存储了0到9这10个数字所需要的火柴数,例如数字0需要6根火柴,1需要2根火柴等。
  2. col(int i) 函数通过递归计算每个数字所需要的火柴数。对于单个数字,直接返回预先存储的火柴数;对于多位数字,将数字分解为各个位数,累加每一位所需的火柴数。
  3. dfs(int x, int sum) 是一个深度优先搜索算法,目的是通过遍历所有可能的数字组合,找出符合条件的数字组合。arr[]数组存储了这三个数的值,sum是当前已经使用的火柴数。
  4. n -= 4 通过减去4根火柴来考虑初始条件,因为每个数字至少需要一个火柴来展示它本身+号和=号
  5. 最终输出符合条件的组合数res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979309.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统】同步与互斥

同步与互斥 一、同步与互斥的概念1.1 同步与异步1.2 进程互斥 二、进程互斥的实现2.1 软件实现2.1.1 单标志法2.1.2 双标志先检查法2.1.3 双标志后检查法2.1.4 Peterson法 2.2 硬件实现2.2.1 中断指令2.2.2 TestAndSet指令2.2.3 Swap指令 三、互斥锁四、信号量机制4.1 整型信号…

【SpringBoot】SpringBoot中分页插件(PageHelper)的使用

目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2?使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户&#xff08;如果用户有一万条数据呢&#xff09;&#xff0c;而是分页展示给用户&#xff0c;这就是分页查询…

php特性

文章目录 函数特性匹配数组报错进制转换绕过正则表达式匹配换行绝对路径绕过 弱类型语言隐式转换核心概念转换规则 运算符优先级 函数特性 匹配数组报错 以此为例&#xff0c;如果传入参数是一个数组&#xff0c;则preg_match()函数报错返回0&#xff0c;完成绕过&#xff0c;…

多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?

飞机的核心电子系统包括发电与配电系统&#xff0c;飞机内部所有设备和系统之间的内部数据通信系统&#xff0c;以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中&#xff0c;我们将了解模块化仪器&#xff08;无论是PCIe…

如何在RedHat官网查询CVE漏洞信息

1.访问红帽&#xff08;Redhat&#xff09;官网 https://access.redhat.com/ 2.按照以下路径逐步访问 在官网导航栏中找到“Security”选项&#xff0c;点击进入后选择“Red Hat CVE Database” 3.搜索CVE漏洞编号 在页面的搜索框中输入具体的 CVE 漏洞编号&#xff0c;然后…

SpringCloud Gateway 集成 Sentinel 详解 及实现动态监听Nacos规则配置实时更新流控规则

目录 一、前言二、版本选择和适配 2.1、本文使用各组件版本2.2、官方推荐版本 三、部署sentinel-dashboard 3.1、下载 sentinel-dashboard jar包3.2、启动 sentinel-dashboard 四、Gateway 集成 Sentinel实现控制台配置流控规则测试 4.1、添加Gateway 集成 Sentinel 包4.2、添加…

星闪开发入门之常见报错整理(一)

系列文章目录 星闪开发入门之常见报错整理&#xff08;一&#xff09; 文章目录 系列文章目录前言一、ComX open fail, please check com is busy or not exist二、‌CMake下载失败三、配置文件出现语法错误四、路径过长导致编译报错五、ninja: build stopped: subcommand fai…

建筑兔零基础人工智能自学记录33|基础知识1

插入学习一下一些基础概念&#xff1a; 1、基本概念 人工智能&#xff1a;让机器像人一样思考。机器学习ML&#xff1a;计算机获取知识的过程。深度学习&#xff1a;机器的一种思考方式&#xff08;借助神经网络&#xff09;。 三者关系 2、机器学习的方式 监督学习&#x…

GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作

GPT-4.5 怎么样&#xff1f;如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作 今天我们来说说上午发布的GPT-4.5&#xff0c;接下来我们说说GPT4.5到底如何&#xff0c;有哪些功能&#xff1f;有哪些性能提升&#xff1f;怎么快速使用到GPT-4.…

yolov8 目标追踪 (源码 +效果图)

1.在代码中 增加了s键开始追踪 e键结束追踪 显示移动距离(代码中可调标尺和像素的比值 以便接近实际距离) 2.绘制了监测区域 只在区域内的检测 3.规定了检测的类别 只有人类才绘制轨迹 import osimport cv2 from ultralytics import YOLO from collections import defaultdic…

Pytorch中的主要函数

目录 一、torch.manual_seed(seed)二、torch.cuda.manual_seed(seed)三、torch.rand(*size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧五、torch.version.cuda&#xff1b;torch.bac…

PT2025 单触控双输出 LED 调光 IC

1. 产品概述 PT2025 是一款单键电容式触摸控制 ASIC &#xff0c;支持单通道触摸输入和单路 / 双路 PWM 输出&#xff0c;可 引脚配置 4 种模式。主要应用于触摸卫浴镜开关盒&#xff0c;具有介质自适应、高抗干扰、宽工作电压范 围、灯光无频闪、外围器件少的突出优…

Python基于机器学习的微博舆情情感分析系统,微博评论情感分析可视化系统(全新升级)

大家好&#xff0c;今天为大家带来的是Python基于机器学习的微博舆情情感分析系统&#xff0c;微博评论情感分析可视化系统&#xff0c;这个系统在原本的系统上进行优化升级。 算法从开源框架的 snlow &#xff0c;到支持机器学习的 lstm 算法可以手动输入语句&#xff0c;进行…

【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡

【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡 开发背景 接下来我们直接打开我们的项目开始进一步操作&#xff0c; 实战开发 导入项目 我把得到的项目解压到本地&#xff0c;我们开…

unity pico开发 三 移动 旋转 传送

文章目录 LocomtionSystem平滑移动转身碰撞体随相机改变身高传送添加射线两种传送区域TeleportationAreaTeleportationArea 美化传送射线 LocomtionSystem 在XR Origin上添加LocomtionSystem脚本&#xff0c;并拖拽XR Origin属性 这是移动的基础 平滑移动 在XR Origin上添加…

C语言整体梳理-基础篇-结构体

结构体详解 1.1结构体是什么&#xff1f; 结构体是一些值的集合&#xff0c;这些值成为成员变量&#xff0c;结构体的每个成员可以是不同类型的变量。 数组是相同类型的元素组成的集合&#xff0c;结构体可以是不同类型元素组成的集合。 1.2结构体的声明 1.2.1常规声明 s…

深度解读 AMS1117:从电气参数到应用电路的全面剖析

在电子设备的电源管理领域&#xff0c;线性稳压器扮演着至关重要的角色&#xff0c;而 AMS1117 凭借其出色的性能和广泛的适用性&#xff0c;成为众多工程师的热门选择。本文将依据相关资料&#xff0c;对 AMS1117 的特性、应用、电气参数等方面进行详细解读。 一、功能特性概…

LabVIEW中交叉关联算法

交叉关联算法通过统计多通道信号间的相关性&#xff0c;抑制各通道独立的本底噪声&#xff0c;保留共有的有效信号成分。其数学本质为对多个通道信号进行两两相乘并累加&#xff0c;最终通过归一化处理得到降噪后的输出信号。 这个VI演示了如何在LabVIEW中执行信号的互相关分析…

SAP-ABAP:SAP数据库视图(Database View)详解-创建

在SAP系统中&#xff0c;数据库视图&#xff08;Database View&#xff09; 是一种基于物理数据库表的虚拟表&#xff0c;通过关联多个表&#xff08;使用INNER JOIN&#xff09;生成逻辑数据集。它存储在数据库中&#xff0c;但本身不存储数据&#xff0c;仅通过查询动态生成结…

GPT-4.5来了

https://chat.xutongbao.top/