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]且火柴数之和为nif (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为当前火柴数加上之前的sumdfs(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); // 从第一个数开始,当前火柴数和为0cout << 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)

七星棋牌源码 是一款运营级的棋牌产品&#xff0c;覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区&#xff0c;支持 安卓、iOS 双端&#xff0c;并且 全开源。这个版本是 修复优化后的二开版本&#xff0c;新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…

安全模块设计:token服务、校验注解(开启token校验、开启签名校验、允许处理API日志)、获取当前用户信息的辅助类

文章目录 引言pom.xmlI 校验注解ApiValidationII token服务TokenService获取当前用户信息的辅助类III 域登录接口响应数据登陆用户信息引言 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO…

贪心算法精品题

1.找钱问题 本题的贪心策略在于我们希望就可能的保留作用大的5元 class Solution { public:bool lemonadeChange(vector<int>& bills) {std::map<int ,int> _map;for(auto ch:bills){if(ch 5) _map[ch];else if(ch 10){if(_map[5] 0) return false;else{_m…

辛格迪客户案例 | 鼎康生物电子合约系统(eSign)项目

01 案例企业 鼎康(武汉)生物医药有限公司于2013年06月19日成立 &#xff0c;是一家总部位于湖北武汉的CDMO公司&#xff0c;坚持以客户为中心&#xff0c;以及时、经济和高质量为服务导向。鼎康生物拥有先进的150,000平方英尺的生产厂房&#xff0c;生产设施位于中国武汉的Bio…

多个pdf合并成一个pdf的方法

将多个PDF文件合并优点&#xff1a; 能更容易地对其进行归档和备份.打印时可以选择双面打印&#xff0c;减少纸张的浪费。比如把住宿发票以及滴滴发票、行程单等生成一个pdf&#xff0c;双面打印或者无纸化办公情况下直接发送给财务进行存档。 方法: 利用PDF24 Tools网站 …

算法-数据结构(图)-迪杰斯特拉最短逻辑算法( Dijkstra)

迪杰斯特拉算法&#xff08;Dijkstras Algorithm&#xff09; 是一种用于计算单源最短路径的经典算法&#xff0c;由荷兰计算机科学家 艾兹赫尔迪杰斯特拉&#xff08;Edsger W. Dijkstra&#xff09; 于1956年提出。它的主要目标是找到从图中的某个源节点到所有其他节点的最短…

windows设置暂停更新时长

windows设置暂停更新时长 win11与win10修改注册表操作一致 &#xff0c;系统界面不同 1.打开注册表 2.在以下路径 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键新建 DWORD 32位值&#xff0c;名称为FlightSettingsMaxPauseDays 根据需求填写数…

降维攻击!PCA与随机投影优化高维KNN

引言&#xff1a;高维数据的“冰山困境” 假设你正在处理一个电商平台的商品图片分类任务&#xff1a;每张图片被提取为1000维的特征向量&#xff0c;100万条数据的距离计算让KNN模型陷入“维度地狱”——计算耗时长达数小时&#xff0c;且内存占用超过10GB。 破局关键&#…

在ubuntu 24.04.2 通过 Kubeadm 安装 Kubernetes v1.31.6

文章目录 1. 简介2. 准备3. 配置 containerd4. kubeadm 安装集群5. 安装网络 calico 插件 1. 简介 本指南介绍了如何在 Ubuntu 24.04.2 LTS 上安装和配置 Kubernetes 1.31.6 集群&#xff0c;包括容器运行时 containerd 的安装与配置&#xff0c;以及使用 kubeadm 进行集群初始…

信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效

随着数据传输、存储及信息技术的飞速发展&#xff0c;信息安全保护已成为重中之重。各安全领域对跨网数据交互的需求日益迫切&#xff0c;数据传输的安全可靠性成为不可忽视的关键。为满足业务需求并遵守保密规范&#xff0c;针对于涉及重要秘密信息&#xff0c;需做到安全的物…

6.6.5 SQL访问控制

文章目录 GRANT授予权限REVOKE回收权限 GRANT授予权限 GRANT语句可以给用户授予权限&#xff0c;基本格式是GRANT 权限 TO 用户。在授权时&#xff0c;WITH GRANT OPTION是可选项&#xff0c;有此句话&#xff0c;被授予权限的用户还能把权限赋给其他用户。 REVOKE回收权限 RE…

蓝桥真题讲解

目录 第一题 题目链接 题目解析 代码原理 代码编写 本题总结 第二题 题目链接 题目解析 代码原理 代码编写 本题总结 第三题 题目链接 题目解析 代码原理 代码编写 本题总结 第一题 题目链接 题目解析 代码原理 图一 图二 图二中的红色字&#xff0c;请仔…

Allegro PCB元件库文件引起的问题-看不见器件,但是不能预览,也就不能放置了

PCB元件库必须包含PCB&#xff08;.psm, .dra)文件&#xff0c;和PAD&#xff08;.pad)文件 在Allegro里Path设置注意事项&#xff1a; 针对psmpath & padpath会有多个文件夹地址的情况。在放一个新的元件到PCB&#xff0c;需要把对应的元件的PCB & PAD地址都放在第一…

Prompt Engineering for Large Language Models

题目 大型语言模型的快速工程 简介 随着 OpenAI 的 ChatGPT 和 Google 的 Bard 等软件的普及&#xff0c;大语言模型&#xff08;LLM&#xff09;已经渗透到生活和工作的许多方面。例如&#xff0c;ChatGPT 可用于提供定制食谱&#xff0c;建议替换缺失的成分。它可用于起草研…

python-leetcode-使用最小花费爬楼梯

746. 使用最小花费爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 解法 1&#xff1a;动态规划&#xff08;O(n) 时间&#xff0c;O(n) 空间&#xff09; class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:n len(cost)dp [0] * (n 1) # 额外多…

服务器IPMI用户名、密码批量检查

背景 大规模服务器部署的时候&#xff0c;少不了较多的网管和监测平台&#xff0c;这些平台会去监控服务器的性能、硬件等指标参数&#xff0c;为了便于管理和控制&#xff0c;则需要给服务器IPMI带外管理添加较多的用户&#xff0c;这就需要对较多的服务器检查所对应的IPMI用…

docker-compose部署开源堡垒机Orion-Visor——筑梦之路

git clone --depth1 https://github.com/dromara/orion-visorcd orion-visor docker compose pull# 配置,此处我保持默认cp .env.example .env# 启动进行数据库初始化docker compose up -d# 访问http://[ip]:8081进行登陆Adminer# 依次导入这些初始化sql orion-visor/sql/init-…

【大模型系列篇】DeepSeek开源周,解锁AI黑科技

&#x1f525; Day1&#xff1a;FlashMLA —— GPU推理加速器 专为处理长短不一的AI推理请求而生&#xff0c;就像给Hopper GPU装上了智能导航&#xff0c;让数据在芯片上跑出3000GB/s的"磁悬浮"速度。✅ 已支持BF16格式&#xff5c;580万亿次浮点运算/秒FlashMLA G…

scala基础

Scala基础 scala基础Scala介绍第一个scala代码object和class的区别关键区别伴生类和伴生对象&#xff1a; 字节码解析在java中创建三个类 反编译代码编译User.class源码后的结果编译Emp.class源码后的结果 注释Scala类型推断&至简原则变量var和val之间的区别可变变量不可变…

智能家居遥控革命!昂瑞微HS6621EM:用「芯」定义AIoT时代的语音交互标杆

AIoT爆发期&#xff0c;遥控器为何成为智能家居的「隐形战场」&#xff1f; 随着Meta、苹果等巨头加速布局空间计算&#xff0c;智能家居生态正从「单一设备联网」向「全场景无感交互」跃迁。作为高频使用的入口设备&#xff0c;语音遥控器的性能直接决定用户体验天花板。昂瑞微…