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 = 0,?backward = 0

  • 直接輸出?m

?關鍵點總結

字母表循環處理
  • 通過?+ 26?和?% 26?確保步數計算正確(避免負數或超出范圍)。

  • 在輸出時,通過?+= 26?或?-= 26?處理字母表的循環(如?'Z' + 1 -> 'A')。

路徑選擇?
  • 優先選擇步數少的路徑。

  • 步數相同時,選擇向前移動的路徑。

?大小寫區分

  • 使用?isupper?判斷字母大小寫,確保正確處理?'A'-'Z'?和?'a'-'z'?的循環。?

?如果小假的內容對你有幫助,請點贊評論收藏。創作不易,大家的支持就是我堅持下去的動力!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80542.shtml
英文地址,請注明出處:http://en.pswp.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 項目中處理本地依賴…