L1-7 最短字母串【保姆级详细讲解】

请你设计一个程序,该程序接受起始字母和目标字母作为输入,通过在字母表中向前或向后移动来计算两个给定字母之间的最短路径。然后,程序会沿着最短路径打印出从起始字母到目标字母的所有字母。例如,如果输入“c”和“k”作为起始字母和目标字母,则程序将计算出在字母表中向前移动的路径为 cdefghijk,它需要 8 个字母,在字母表中向后移动的路径是cbazyxwvutsrqponmlk,它需要 19 个字母。因此,程序将打印 cdefhijk,因为 8 个字母小于 19 个。
注意在字母数相等的情况下,程序将打印字母在字母表中向前移动。

image.png

输入格式:

输入为两个同为大写或同为小写的字母,空格分隔。

输出格式:

输出向前或向后移动的最短字母串。

输入样例1:

H K

输出样例1:

HIJK

输入样例2:

b w

输出样例2:

bazyxw

输入样例3:

Q D

输出样例3:

QRSTUVWXYZABCD

输入样例4:

m m

输出样例4:

m

目录

 完整代码

 计算向前和向后的步数

  选择路径

 输出路径字母

向前移动

 向后移动

 处理相同字母的情况

示例分析

示例 1:H K

示例 2:b w

示例 3:Q D

示例 4:m m

 关键点总结

字母表循环处理

路径选择 


浅说:这道题小假对其思路和解题步骤都做了详细地讲解,方便大家理解 ~  


 完整代码

#include<bits/stdc++.h>
using namespace std;int main() {char start, end;cin >> start >> end;int forward = (end - start + 26) % 26;int backward = (start - end + 26) % 26;if (forward <= backward) {for (int i = 0; i <= forward; ++i) {char c = start + i;if (isupper(start)) {if (c > 'Z') c -= 26;} else {if (c > 'z') c -= 26;}cout << c;}} else {for (int i = 0; i <= backward; ++i) {char c = start - i;if (isupper(start)) {if (c < 'A') c += 26;} else {if (c < 'a') c += 26;}cout << c;}}return 0;
}

 计算向前和向后的步数

int forward = (end - start + 26) % 26;
int backward = (start - end + 26) % 26;
  • forward:从 start 到 end 向前移动的步数。

    • end - start:直接计算字母的 ASCII 差值。

    • + 26:确保差值为正(避免负数)。

    • % 26:因为字母表有 26 个字母,取模后得到实际的步数。

  • backward:从 start 到 end 向后移动的步数。

    • start - end:直接计算字母的 ASCII 差值。

    • + 26 和 % 26:同上,确保步数为正。

  选择路径

if (forward <= backward) {// 向前移动
} else {// 向后移动
}
  • 如果 forward <= backward,选择向前移动的路径(步数更少或相等)。

  • 否则,选择向后移动的路径(步数更少)。

 输出路径字母

向前移动
for (int i = 0; i <= forward; ++i) {char c = start + i;if (isupper(start)) {if (c > 'Z') c -= 26; // 处理大写字母循环} else {if (c > 'z') c -= 26; // 处理小写字母循环}cout << c;
}
  • 从 start 开始,依次输出 start + ii 从 0 到 forward)。

  • 如果字符超出字母表范围(如 start 是大写字母且 start + i > 'Z'),则通过 -= 26 回到字母表开头(如 'Z' + 1 -> 'A')。

 向后移动
for (int i = 0; i <= backward; ++i) {char c = start - i;if (isupper(start)) {if (c < 'A') c += 26; // 处理大写字母循环} else {if (c < 'a') c += 26; // 处理小写字母循环}cout << c;
}
  • 从 start 开始,依次输出 start - ii 从 0 到 backward)。

  • 如果字符超出字母表范围(如 start 是小写字母且 start - i < 'a'),则通过 += 26 回到字母表末尾(如 'a' - 1 -> 'z')。

 处理相同字母的情况

如果 start == end,则 forward 和 backward 都为 0,直接输出 start

示例分析

示例 1:H K
  • start = 'H' (72), end = 'K' (75)

  • forward = (75 - 72 + 26) % 26 = 3

  • backward = (72 - 75 + 26) % 26 = 23

  • forward < backward,选择向前移动。

  • 输出:H (72), I (73), J (74), K (75) → HIJK

示例 2:b w
  • start = 'b' (98), end = 'w' (119)

  • forward = (119 - 98 + 26) % 26 = 21

  • backward = (98 - 119 + 26) % 26 = 5

  • forward > backward,选择向后移动。

  • 输出:b (98), a (97), z (122), y (121), x (120), w (119) → bazyxw

示例 3:Q D
  • start = 'Q' (81), end = 'D' (68)

  • forward = (68 - 81 + 26) % 26 = 13

  • backward = (81 - 68 + 26) % 26 = 13

  • forward == backward,选择向前移动。

  • 输出:Q (81), R (82), ..., Z (90), A (65), B (66), C (67), D (68) → QRSTUVWXYZABCD

示例 4:m m
  • start = 'm'end = 'm'

  • forward = 0backward = 0

  • 直接输出 m

 关键点总结

字母表循环处理
  • 通过 + 26 和 % 26 确保步数计算正确(避免负数或超出范围)。

  • 在输出时,通过 += 26 或 -= 26 处理字母表的循环(如 'Z' + 1 -> 'A')。

路径选择 
  • 优先选择步数少的路径。

  • 步数相同时,选择向前移动的路径。

 大小写区分

  • 使用 isupper 判断字母大小写,确保正确处理 'A'-'Z' 和 'a'-'z' 的循环。 

 如果小假的内容对你有帮助,请点赞评论收藏。创作不易,大家的支持就是我坚持下去的动力!

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

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

相关文章

项目QT+ffmpeg+rtsp(三)——延迟巨低的项目+双屏显示

文章目录 前言双屏显示widget.cppwidget.h前言 对于复现情况,分为两种情况 第一种,对于我而言,是直接解压后,就能直接运行了 第二种,对于师兄而言,需要你构建debug后,会产生这个文件夹,执行的时候,地址应该在这,我猜的,这里面没有dll,exe程序就找不到dll这些库,你…

ansible进阶06

复杂的循环结构 循环基础 [studentworktest myansible]$ cat users.yml --- - name: create usershosts: serveratasks:- name: create some usersuser:name: "{{item}}"password: "{{123456|password_hash(sha512)}}"state: presentloop:- zhangsan- li…

Go 模块版本管理

Go 模块版本管理指南 1、创建带注释的 Git 标签 基本命令 # 创建带注释的标签 git tag -a v1.0.0 -m "Release version 1.0.0 - initial stable release" -a&#xff1a;创建带注释的标签 -m&#xff1a;添加标签注释信息 # 推送标签到远程仓库 git push origin v…

Java—— IO流 第一期

什么是IO流 存储和读取数据的解决方案 I&#xff1a;input O&#xff1a;output 流&#xff1a;像水流一样传输数据 IO流的作用 用于读写数据(本地文件&#xff0c;网络) IO流的分类 按照流向分类 输出流&#xff1a;程序 --> 文件 输入流&#xff1a;文件 --> 程序 按照…

物联网安全技术的最新进展与挑战

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;越来越多的设备被连接到互联网&#xff0c;从智能家居设备到工业控制系统&#xff0c;物联网正在深刻改变我们的生活和生产方式。然而&#xff0c;物联网的安全问题也日益凸显&#xff0c;成为制约其发展的关键…

【深度学习基础】损失函数与优化算法详解:从理论到实践

【深度学习基础】损失函数与优化算法详解&#xff1a;从理论到实践 一、引言 1. 损失函数与优化算法在深度学习中的核心作用 在深度学习中&#xff0c;模型训练的本质是通过不断调整参数&#xff0c;使模型输出尽可能接近真实值。这一过程的核心驱动力是损失函数&#xff08;…

mvc-review

review&#xff1a; 1.Servlet生命周期中初始化方法&#xff1a;init(),init(config) public void init(ServletConfig config) throws ServletException { this.config config; this.init(); } 因此&#xff0c;如果我们需要…

YouTube视频字幕转成文章算重复内容吗?

很多创作者误以为「自己说的话不算抄袭」&#xff0c;却不知道YouTube自动生成的字幕早已被搜索引擎存档。 去年就有案例&#xff1a;某美食博主将教程视频字幕转为图文&#xff0c;结果原创度检测仅42%&#xff0c;导致页面权重暴跌。 本文揭秘5个实操技巧&#xff1a;从删除…

R语言数据可视化

R note book 文档–输出html格式文档&#xff0c;plotly不能生成PDF文件 --- title: "R语言数据可视化" output: html_notebook ---在R语言中进行数据可视化是数据分析和呈现的重要环节&#xff0c;R提供了多种强大的绘图系统和工具。以下是常见的数据可视化方法和示…

Axure难点解决分享:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…

云原生攻防2(Docker基础补充)

Docker基础入门 容器介绍 Docker是什么 Docker是基于Linux内核实现,最早是采用了 LXC技术,后来Docker自己研发了runc技术运行容器。 它基于Google Go语言实现,采用客户端/服务端架构,使用API来管理和创建容器。 虚拟机 VS Docker Namespace 内核命名空间属于容器非常核…

Spring Boot 拦截器:解锁5大实用场景

一、Spring Boot中拦截器是什么 在Spring Boot中&#xff0c;拦截器&#xff08;Interceptor&#xff09;是一种基于AOP&#xff08;面向切面编程&#xff09;思想的组件&#xff0c;用于在请求处理前后插入自定义逻辑&#xff0c;实现权限校验、日志记录、性能监控等非业务功能…

Vue百日学习计划Day24-28天详细计划-Gemini版

总目标: 在 Day 24-27 熟练掌握 Vue.js 的各种模板语法&#xff0c;包括文本插值、属性绑定、条件渲染、列表渲染、事件处理和表单绑定&#xff0c;并能结合使用修饰符。 所需资源: Vue 3 官方文档 (模板语法): https://cn.vuejs.org/guide/essentials/template-syntax.htmlVu…

分布式微服务系统架构第125集:AI大模型

加群联系作者vx&#xff1a;xiaoda0423 仓库地址&#xff1a;https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ 一、user 表&#xff08;用户表&#xff09; sql 复制编辑 create table if not exists user (id bigint auto_increment comment id pri…

机器学习 Day16 聚类算法 ,数据降维

聚类算法 1.简介 1.1 聚类概念 无监督学习&#xff1a;聚类是一种无监督学习算法&#xff0c;不需要预先标记的训练数据 相似性分组&#xff1a;根据样本之间的相似性自动将样本归到不同类别 相似度度量&#xff1a;常用欧式距离作为相似度计算方法 1.2 聚类vs分类 聚类&…

【Linux】第十八章 调优系统性能

1. 系统管理员可以使用哪个命令来更改tuned守护进程的设置&#xff1f; tuned 的调优配置集存储在 /usr/lib/tuned&#xff08;默认&#xff09; 和 /etc/tuned&#xff08;自定义 或当前有效&#xff09;目录下。每个配置集都有一个单独的目录&#xff0c;目录中包含 tuned.c…

【JVS更新日志】企业文档AI助手上线、低代码、智能BI、智能APS、AI助手5.14更新说明!

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&…

ollama调用千问2.5-vl视频图片UI界面小程序分享

1、问题描述&#xff1a; ollama调用千问2.5-vl视频图片内容&#xff0c;通常用命令行工具不方便&#xff0c;于是做了一个python UI界面与大家分享。需要提前安装ollama&#xff0c;并下载千问qwen2.5vl:7b 模型&#xff0c;在ollama官网即可下载。 &#xff08;8G-6G 显卡可…

Web 架构之会话保持深度解析

文章目录 一、引言二、会话保持的基本概念2.1 什么是会话2.2 为什么需要会话保持 三、会话保持的常见实现方式3.1 基于客户端的会话保持3.1.1 Cookie 方式3.1.2 URL 重写方式 3.2 基于服务器端的会话保持3.2.1 负载均衡器会话保持3.2.2 会话共享 四、会话保持可能遇到的问题及解…

Maven 项目中将本地依赖库打包到最终的 JAR 中

文章目录 前言详细步骤 前言 在现代后端开发中&#xff0c;构建高效且可扩展的 Web 应用程序通常依赖于多种第三方库和内部依赖。这些依赖可以来自公共仓库&#xff0c;也可能是公司内部自研的库或尚未发布到公共仓库的 JAR 包。本文将详细介绍如何在 Maven 项目中处理本地依赖…