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、年龄要求 处理…

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

一、是什么 在计算机科学中&#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;实现仓…

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;属性如何绑定到数据…

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

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

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

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

二分搜索树和AVL树

问题 跑道预订系统。一个飞机场只有一个飞机跑道&#xff0c;需要为未来的飞机着陆预留空闲的跑道。飞机预订的着陆时间为t&#xff0c;假如没有其他的计划在(t-k,tk)的时间内着陆的飞机&#xff0c;则将t加入集合R。其中k是变量。请问有没有一种时间复杂度为O(logn)的算法解决…

增强PLMs可塑性!MetaAI | 提出主动遗忘机制,加快模型收敛,准确率高出21.2%!

引言 在自然语言处理领域&#xff0c;预训练语言模型&#xff08;PLMs&#xff09;扮演着至关重要的角色&#xff0c;它可以根据任务需求&#xff0c;可迁移至各种下游任务中。然而&#xff0c;PLMs在适应新语言时面临挑战&#xff0c;尤其是在数据和计算资源受限的情况下。本…

数据结构与算法----复习Part 14 (树与二叉树)

本系列是算法通关手册LeeCode的学习笔记 算法通关手册&#xff08;LeetCode&#xff09; | 算法通关手册&#xff08;LeetCode&#xff09; (itcharge.cn) 目录 一&#xff0c;树&#xff08;Tree&#xff09; 树的相关术语 节点间关系 树的其他术语 二&#xff0c;二叉…

比较JavaScript中的for...in和for...of循环

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

linux解析域名指令 nslookup 或者 host

host www.baidu.com 第二种方法 nslookup www.baidu.com 注意&#xff1a;ns是name server之意