2 条题解
-
0
📝 题目大意
给定一个由小写字母和数字组成、以
2023结尾的字符串 ,将最后一个字符改为4后输出。💡 解题思路
-
题目分析:字符串长度 ,数据规模极小。题目保证 以
2023结尾,因此最后一个字符一定是3,直接替换为4即可,无需额外判断。 -
算法推导:
- 读入字符串 (代码中使用
scanf配合s+1实现 1-indexed 存储,方便通过strlen(s+1)直接定位末尾位置)。 - 将最后一个字符(即
s[strlen(s+1)])改为'4'。 - 输出修改后的字符串。
- 读入字符串 (代码中使用
-
边界与细节:
- 可能恰好等于
"2023"(如样例 3),此时长度为 4,strlen(s+1)返回 4,s[4]被修改为'4',输出2024,逻辑正确。 - 题目保证以
2023结尾,因此无需检查末尾字符是否为3,直接覆盖即可。 - 注意
strlen(s+1)返回的是字符串长度(从s[1]开始的有效字符数),而s[length]正好是最后一个字符的位置。
- 可能恰好等于
⏱️ 复杂度分析
- 时间复杂度:,其中 ,主要来自
strlen遍历字符串一次。 - 空间复杂度:,用于存储输入字符串。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; // 题目的字符串长度上限为 100,这里开得比较大,足够使用 char s[N]; int main() { scanf("%s", s + 1); // 从 s[1] 开始读入字符串(1-indexed) s[strlen(s + 1)] = '4'; // strlen(s+1) 返回字符串长度,正好是最后一个字符的下标,将其改为 '4' printf("%s\n", s + 1); // 从 s[1] 开始输出修改后的字符串 return 0; } -
- 1
信息
- ID
- 762
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 2
- 已通过
- 2
- 上传者