[蓝桥杯]接龙数列(C语言)

目录

题目链接

题目理解

解题思路

完整代码 

重难点解答

*dp数组的具体用法

*对于dp[b]=dp[a]+1>dp[b]?dp[a]+1:dp[b]的解释


题目链接

    [蓝桥杯 2023 省 B] 接龙数列 - 洛谷

题目理解

    这道题让我们求任给的一串数字,若想让其变成接龙数列最少需要删除的数字个数。首先我们要明白什么是接龙数列。接龙数列是前一个数的末位数字与下一个数的第一位相同的数列(比如 37、798、888)。题目理解起来没什么难度,下面我们来讲一下解题思路。

解题思路

  这道题目的思路是找出给定数字序列中能够凑成的最长接龙序列,然后用总长度减去最长序列的长度,即为最少需要删除的数字个数。

  1. 定义一个长度为10的数组dp,用于记录每个数字作为末位数字时的最长接龙序列长度。
  2. 遍历输入的数列,对于每个数,将其首位数字记为a,末位数字记为b。
  3. 使用动态规划的思想,更新dp数组中对应的值。dp[b]的值应该是dp[a]+1和dp[b]的较大值。
  4. 同时,记录最大的接龙序列长度amount。
  5. 最后,输出n-amount,即最少需要删除的数的个数。

完整代码 

#include<stdio.h>
main()
{int a=0,b=0;//a为数字的首位数,b为数字的末数int n=0,amount=0;//n表示数列中数字个数,amount表示最长的接龙数列的数字个数int dp[10]={0},number=0;//dp数组用于存储对应位的最长数列长度scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&number);b=number%10;//b为末位数字while(number>=10)//a为首位数字{a=number/10;number/=10;}dp[b]=dp[a]+1>dp[b]?dp[a]+1:dp[b];//重点,详见文章重难点解答if(dp[b]>amount){amount=dp[b];}}printf("%d",n-amount);}

重难点解答

    *dp数组的具体用法

        具体来说,我们遍历输入的数字序列。dp[n]就是以数字n在某数字第一次作为末位数出现的接龙数列的长度。比如题目示例:11  121  22  12  2023中。以1结尾(这里的1为数字11末位的1)的长度为4(11 121 12 2023)、以2结尾(这里的2为数字22末位的2)的长度为2(22 2023)、以3结尾(这里的3为数字2023末位的3)的长度为1(2023)。而dp数组的作用即是存放他们对应数字的长度。如dp[1]存放的数字代表1第一次作为末位数出现的接龙数列长度。

*对于dp[b]=dp[a]+1>dp[b]?dp[a]+1:dp[b]的解释

        在这个表达式中,我们比较了两个值:dp[a] + 1dp[b]。其中,dp[a]+1表示将当前数字作为最后一个数字时的最长接龙序列长度加上1,即将当前数字接在前一个数字之后形成的新的接龙序列长度。而dp[b]表示当前数字作为末位数字时的已知的最长接龙序列长度。

        我们通过比较这两个值的大小,选择较大的值来更新dp数组中的值。如果dp[a] + 1大于dp[b],则说明将当前数字接在前一个数字之后形成的新的接龙序列长度更长,我们就将dp[b]更新为dp[a] + 1。否则,如果dp[a] + 1小于等于dp[b],则说明当前数字无法接在前一个数字之后形成更长的接龙序列,我们就保持dp[b]不变。

        通过这样的更新操作,我们可以逐步计算出每个数字作为末位数字时的最长接龙序列长度,从而得到最终的结果。

————(如有问题,欢迎评论区提问)————

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

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

相关文章

【程序员经常使用的算法】讲解

程序员经常使用的算法 程序员经常使用的一些算法包括&#xff1a; 1. 排序算法&#xff08;Sorting Algorithms&#xff09;: 冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;归…

uniapp列表进入动画

app列表入场动画 - DCloud 插件市场 列表入场动画https://ext.dcloud.net.cn/plugin?id16957

中医把脉笔记

目录 寸关尺对应的五脏六腑自己给自己把脉把脉五布法定寸关尺分浮中沉分快慢辨阴阳看虚实 参考文章 寸关尺对应的五脏六腑 自己给自己把脉 up主道道总是睡不着的把脉教学视频 用中指按住小骨头下面一点&#xff0c;这是关脉&#xff0c;左手的关脉对应肝脏。 把脉五布法 定…

网络基础aaa

三次握手 四次挥手 网络模型 TCP or UDP 的特点 如何理解 TCP 的5层协议 TCP的5层协议是指计算机网络体系结构中&#xff0c;与TCP&#xff08;传输控制协议&#xff09;相关的五个层次。这五个层次从高到低依次是&#xff1a;应用层、传输层、网络层、数据链路层和物理层。每…

java注释的详尽解析

一、什么是注解 (1).注解的作用 ①&#xff1a;注解一般用于对程序的说明&#xff0c;就像注释一样&#xff0c;但是区别是注释是给人看的&#xff0c;但是注解是给程序看的。 ②&#xff1a;让编译器进行编译检查的作用&#xff0c;比如下边这个Override注解是重写的意思&am…

前端缓存使用规范

一、Cookie使用规范 cookie的存储空间非常有限且会携带在请求头中会浪费不必要的流量&#xff0c;如果仅仅是为存储数据&#xff0c;可以采用其他替代方案&#xff0c;例如 webStorage&#xff0c;非必要不使用cookie。 1、使用方法 注意&#xff1a;过期时间时需转换成UTC格…

内存安全的编程语言

美国政府新颁布《回归基础构件&#xff1a;通往安全软件之路》 《回归基础构件&#xff1a;通往安全软件之路》中&#xff0c;白宫国家网络主任办公室&#xff08;ONCD&#xff09;呼吁开发者使用「内存安全的编程语言」 内存安全的编程语言 根据NSA的建议&#xff0c;内存…

sqlyog社区版下载,数据库客户端,mysql

Downloads webyog/sqlyog-community Wiki GitHubhttps://github.com/webyog/sqlyog-community/wiki/Downloadssqlyog社区版下载

liteIDE 解决go root报错 go: cannot find GOROOT directory: c:\go

liteIDE环境配置 我使用的liteIDE为 x36 5.9.5版本 。在查看–>选项 中可以看到 LiteEnv&#xff0c;双击LiteEnv &#xff0c;在右侧选择对应系统的env文件&#xff0c;我的是win64系统&#xff0c;所以文件名为win64.env 再双击 win64.env &#xff0c;关闭当前窗口&…

git 初始化项目并上传到github

如果还没配置过&#xff0c;需要配置账号信息 git config --global user.name "baymax-collab" git config --global user.email "baymax-collabtest.com"创建一个新的存储库 git clone gitgithub.com:xxxx cd test git switch --create main touch READ…

C++ Qt开发:QHostInfo主机地址查询组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QHostInfo组件实现对主机地址查询功能…

ROS——VirtualBox下载

下载&安装Virtualbox Oracle VM VirtualBox 根据电脑系统版本下载。 注意&#xff1a;前提是电脑cpu要开启虚拟化 根据自己的需求下载 双击开始安装 浏览可以更改下载位置&#xff0c;默认在C盘 然后一直点&#xff0c;是或下一步就好了 下载拓展包 后续需要连接使…

NASA数据集——GOES-16卫星的高级图像和地球观测数据

简介 GHRSST NOAA/STAR GOES-16 ABI L2P America Region SST v2.70 dataset in GDS2 ABI_G16-STAR-L2P-v2.70是美国国家航空航天局&#xff08;NASA&#xff09;的一种卫星数据处理产品。这个产品是由GOES-16&#xff08;也称为GOES-East&#xff09;卫星的先进基线/全球地球…

201909青少年软件编程(Scratch)等级考试试卷(三级)

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;三级&#xff09;2019年9月 第1题&#xff1a;【 单选题】 执行下面的脚本后&#xff0c;变量“分数”的值是多少&#xff1f;&#xff08;&#xff09; A:5 B:6 C:10 D:25 【正确答案】: C 【试题…

Day3 DOM-节点操作

3.1 节点 节点&#xff1a;标签、文本、注释、换行等&#xff0c;节点类型nodeType、节点名称nodeName、节点值nodeValue 元素&#xff1a;标签 节点层级&#xff1a;父节点、子节点、兄弟节点 parentNode父节点的最大节点是document&#xff0c;再朝上查找就是null prentElem…

2024年华为OD机试真题-提取字符串中的最长数学表达式并计算-Java-OD统一考试(C卷)

题目描述: 提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回0 简单数学表达式只能包含以下内容 0-9数字,符号 +-* 说明: 1. 所有数字,计算结果都不超过long 2. 如果有多个长度一样的,请返回第一个表达式的结果 3. 数学表达式…

day18_支付宝支付项目部署(保存支付信息,支付接口,支付宝异步回调)

文章目录 1 支付1.1 需求说明1.2 支付宝支付1.2.1 产品介绍产品特色使用示例申请条件费率 1.2.2 接入准备1.2.3 手机网站支付快速接入1.2.4 官方demo研究 1.3 环境搭建(service-pay)1.4 后端接口1.4.1 保存支付信息实现流程说明查询订单接口开发openFeign接口定义代码实现添加依…

Rust:Arc::new(...) 生成的变量保存在堆上吗?

是的&#xff0c;当你使用 Arc::new(...) 在 Rust 中创建一个新的 Arc&#xff08;Atomic Reference Counted&#xff09;时&#xff0c;传递给 Arc::new 的数据&#xff08;或其副本&#xff09;会被分配到堆上。Arc 是一个引用计数智能指针&#xff0c;它允许数据在多个所有者…

Kafka MQ 主题和分区

Kafka MQ 主题和分区 Kafka 的消息通过 主题 进行分类。主题就好比数据库的表&#xff0c;或者文件系统里的文件夹。主题可以被分为若干个 分区 &#xff0c;一个分区就是一个提交日志。消息以追加的方式写入分区&#xff0c;然 后以先入先出的顺序读取。要注意&#xff0c;由…

新一代 Git 工具,AI 赋能!深度集成、简化操作 | 开源日报 No.194

gitbutlerapp/gitbutler Stars: 7.2k License: NOASSERTION gitbutler 是一个基于 Git 的版本控制客户端。旨在为现代工作流程构建一个全新的 Git 分支管理工具。 虚拟分支&#xff1a;可以同时在多个分支上工作&#xff0c;而无需不断切换分支简化提交管理&#xff1a;通过拖…