1361:产生数(Produce)

【解题思路】
1、将数字拆分保存在数组中,而后转换每一位。
2、将数字变化规则保存在x、y两个一维数组中,x[i]到y[i]是一种转换规则。
3、从n的初始值开始搜索,对n做数字拆分,将拆分后的各位数字保存在一个数组中。针对数组中的每位数字,看能否通过转换规则将该数字转换为另一个数字。如果可以,那么做一次转换,将该数组通过数字组合变为一个整数,通过vis数组判断该整数是否出现过。如果出现过,那么略过。如果没出现过,将该整数在vis数组中设为“出现过”,产生的数字个数加1,而后从该整数开始再次进行搜索。

输入样例分析
234
2
2 5
3 6

【参考代码】

广搜

#include<bits/stdc++.h>
using namespace std;
#define K 20
int n, k, ct, x[K], y[K], arr[5], ai;
bool vis[10001];
void toArr(int num)//将整数num进行数字拆分,结果保存在数字数组arr中。(包括num为0的情况) 
{ai = 0;int a = num;do{arr[++ai] = a % 10;a /= 10;}while(a > 0);    
}
int toNum()//将数字数组arr保存的数字转为整型数字 
{int num = 0;for(int i = ai; i >= 1; --i)num = num * 10 + arr[i];return num;
}
void bfs()
{queue<int> que;vis[n] = true;ct = 1;que.push(n);while(que.empty() == false){int u = que.front();que.pop();toArr(u);//将u转为数字数组arr for(int i = 1; i <= ai; ++i)//遍历arr中的每一位 {for(int j = 1; j <= k; ++j)//遍历每条规则 {if(arr[i] == x[j]){arr[i] = y[j];int newNum = toNum();if(vis[newNum] == false){vis[newNum] = true;ct++;que.push(newNum);}arr[i] = x[j];//还原 }}}}
}
int main()
{cin >> n >> k;for(int i = 1; i <= k; ++i)cin >> x[i] >> y[i];bfs();cout << ct;return 0;
}

深搜

#include <bits/stdc++.h>
using namespace std;
int n, k, x[20], y[20], arr[5], ai, ct;
bool vis[10000];
void toArr(int num)//将整数num进行数字拆分,结果保存在数字数组arr中。(包括num为0的情况) 
{ai = 0;int a = num;do{arr[++ai] = a % 10;a /= 10;}while(a > 0);    
}
int toNum()//将数字数组arr保存的数字转为整型数字 
{int num = 0;for(int i = ai; i >= 1; --i)num = num * 10 + arr[i];return num;
}
void dfs(int num)
{int temp, newNum;for(int i = 1; i <= ai; ++i){for(int j = 1; j <= k; ++j)//如果存在替换arr[i]的规则 {if(arr[i] == x[j]){arr[i] = y[j];newNum = toNum();//合成得到新的整数 if(vis[newNum] == false)//如果新的整数nweNum没出现过 {vis[newNum] = true;//将newNum标记为出现过 ct++;//数字出现的个数加1 dfs(newNum);}arr[i] = x[j];//还原 }}}
}
int main()
{cin >> n >> k;for(int i = 1; i <= k; ++i)cin >> x[i] >> y[i];toArr(n);vis[n] = true;ct = 1;dfs(n);cout << ct;return 0;
}

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

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

相关文章

初识进程状态

&#x1f30e;进程状态【上】 文章目录&#xff1a; 进程状态 发现进程的状态 运行队列 进程排队 进程状态的表述       状态在代码中的表示       运行状态       阻塞状态       挂起状态 总结 前言&#xff1a; 为了搞明白正在运行的进程是什么意思…

“批量记录,轻松修改:让收支明细管理更高效!“

在繁忙的现代生活中&#xff0c;管理个人收支明细成为了我们理财的重要一环。晨曦记账本&#xff0c;作为一款功能强大的记账工具&#xff0c;致力于帮助用户轻松记录和管理每一笔收支&#xff0c;让财务更加清晰、有序。 第一步&#xff0c;首先我们要记进入晨曦记账本主页面…

TSN工业交换机在煤矿行业的革命性应用

随着信息化时代的到来&#xff0c;煤矿行业也迎来了前所未有的机遇与挑战。在这个充满活力和竞争的领域&#xff0c;技术的革新对于提高生产效率、保障安全生产至关重要。而随着时间敏感网络&#xff08;TSN&#xff09;技术的不断发展&#xff0c;TSN工业交换机作为其关键组成…

第二证券|股票开户有什么条件?炒股新手一定要看!

股票买卖尽管投资风险是很高的&#xff0c;可是由于其报答性也高&#xff0c;仍是有许多投资者乐意去测验&#xff0c;这也带动了许多新手买卖。那么股票开户有什么条件&#xff1f;下面就由第二证券为大家剖析&#xff1a; 股票开户有什么条件&#xff1f; 1、年龄要求 处理…

Anaconda3安装pandas失败,处理办法

安装 pandas 失败可能是由于多种原因造成的&#xff0c;以下是一些解决这个问题的常见方法&#xff1a; 0、清理Anaconda缓存,重新安装pandas conda clean --all conda install pandas 1、更新 Anaconda&#xff1a; 确保你的 Anaconda 环境是最新的。可以使用以下命令来更新…

C# mysql数据库操作

MySQL 是一个流行的开源关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发并后来被 Oracle 公司收购。MySQL 提供了可靠和高性能的数据存储和检索能力&#xff0c;适用于各种规模的应用程序。以下是 MySQL 数据库的介绍、使用场景以及优缺点&#xff1a; 数据库介绍&…

二分查找的理解及应用场景。

一、是什么 在计算机科学中&#xff0c;二分查找算法&#xff0c;也称折半搜索算法&#xff0c;是一种在有序数组中查找某一特定元素的搜索算法 想要应用二分查找法&#xff0c;则这一堆数应有如下特性&#xff1a; 存储在数组中有序排序 搜索过程从数组的中间元素开始&…

(黑马出品_高级篇_02)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_高级篇_02&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术——分布式事务 今日目标1.分布式事务问题1.1.本地事务1.2.分布式事务1.3.演示分布式事务问题 2.理论基础2.1.CAP定理2.1.1.一致性2.1.2.可用性2…

WMS系统批次管理全面解析

一、WMS系统批次管理的基本概念 WMS系统的批次管理&#xff0c;是指对仓库中不同批次的产品进行精细化、规范化的管理&#xff0c;确保产品的可追溯性、可控制性和安全性。批次管理涉及到产品的入库、存储、出库等各个环节&#xff0c;通过对批次的精确控制&#xff0c;实现仓…

面试经典-4-LRU 缓存

题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返…

RK3568行业定制主板脉冲群抗扰度整改方案验证

1. 试验目的及原理 电快速瞬变脉冲群EFT试验的目的是验证电子设备机械开关对电感性负载切换、继电器触点弹跳、高压开关切换等引起的瞬时扰动的抗干扰能力。这种试验方法是一种耦合到电源线路、控制线路、信号线路上的由许多快速瞬变脉冲组成的脉冲群试验。容易出现问题的场合有…

微信小程序开发:上传网络图片到阿里云oss

上文遇到的问题&#xff0c;用户上传的人像图片在经过人像增强后返回的结果需要再次上传到阿里云的oss。 因为是需要下下载&#xff0c;再上传&#xff0c;这个域名我们没有在MP后台配置download域名&#xff0c;所以报错了&#xff1a; 但是MP后台只能配置https的域名&#xf…

常见面试题之计算机网络

1. OSI 五层模型&#xff08;或七层模型&#xff09;是什么&#xff0c;每一层的作用是什么 应用层&#xff1a;又可细分为应用层、表示层、会话层。其中应用层主要做的工作就是为应用程序提供服务&#xff0c;常见的协议为 HTTP、HTTPS、DNS等&#xff1b;表示层主要做的工作…

如何只用pycharm创建venv虚拟环境

如何只用pycharm创建venv虚拟环境 网上貌似没有好的博客讲解&#xff0c;我之前也一直在这环境搭建上疑惑。不过照着我这博客来&#xff0c;应该没问题了。 前言 如图所示&#xff0c;我新建了一个空白文件夹。 接下来点击终端&#xff08;AltF12&#xff09; 如果发现开头…

使用Thymeleaf-没有js的html模板导出为pdf

html模板 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org"><head><title>PDF Template</title> </head> <body> <h1>User Information</h1> <p>Name: <span th:text"${user.name}&…

【BI-Dataease】dataease设计思路

参考&#xff1a;https://juejin.cn/post/7089310768671227940 1、BI可视化工具的关键问题是什么&#xff1f; &#xff08;1&#xff09;各种数据源的数据结构和类型如何统一&#xff1f; &#xff08;2&#xff09;各种图表的配置属性不一致&#xff0c;属性如何绑定到数据…

不同系统有着不同的文件路径分隔符

在不同的操作系统中&#xff0c;文件路径的分隔符是不一样的&#xff1a; 在类 Unix&#xff08;例如 Linux 和 macOS&#xff09;系统中&#xff0c;文件路径使用正斜杠&#xff08;/&#xff09;作为目录分隔符。在 Windows 系统中&#xff0c;文件路径使用反斜杠&#xff0…

【python】linux系统安装了多个版本的python,如何查看安装路径、第三方库路径

【python】linux系统安装了多个版本的python&#xff0c;如何查看安装路径、第三方库路劲。 1. 查看安装路径、第三方库路径 进入对应版本的python路径&#xff0c;进入交互界面&#xff0c;输入 import sys sys.path 2. 查看第三方库中已安装库

tesseract ocr 安装/调用/训练

安装 jTessBoxEditor 训练工具自带 tesseract-ocrVietOCR - Browse /jTessBoxEditor at SourceForge.net jTessBoxEditor 需要 JDK 依赖 jdk-8u201-windows-x64.exe下载地址 Java Downloads | Oracle tessseract 开源地址 https://github.com/tesseract-ocr/tesseract PHP …

STM32进阶笔记——FATFS文件系统(下)

本专栏争取每周三更新直到更新完成&#xff0c;期待大家的订阅关注&#xff0c;欢迎互相学习交流。 本文需要一些SD卡和内存管理等前置知识&#xff0c;后续文章会介绍&#xff0c;这里先介绍一下FATFS文件系统。关于FATFS的文章分为上下两篇&#xff0c;上篇主要介绍什么是FAT…