2 条题解

  • 0
    @ 2026-6-19 22:38:16

    SEE

    #include<iostream>
    #include<string>
    using namespace std;
    int main(){
    	string s;
    	cin>>s;
    	for(int i=0;i<=s.size()-2;i++){
    		cout<<s[i];
    	}
    	cout<<4;
    	return 0; 
    }
    
    • 0
      @ 2026-6-19 10:30:45

      📝 题目大意

      给定一个由小写字母和数字组成、以 2023 结尾的字符串 SS,将最后一个字符改为 4 后输出。

      💡 解题思路

      1. 题目分析:字符串长度 S100|S| \le 100,数据规模极小。题目保证 SS2023 结尾,因此最后一个字符一定是 3,直接替换为 4 即可,无需额外判断。

      2. 算法推导

        • 读入字符串 SS(代码中使用 scanf 配合 s+1 实现 1-indexed 存储,方便通过 strlen(s+1) 直接定位末尾位置)。
        • 将最后一个字符(即 s[strlen(s+1)])改为 '4'
        • 输出修改后的字符串。
      3. 边界与细节

        • SS 可能恰好等于 "2023"(如样例 3),此时长度为 4,strlen(s+1) 返回 4,s[4] 被修改为 '4',输出 2024,逻辑正确。
        • 题目保证以 2023 结尾,因此无需检查末尾字符是否为 3,直接覆盖即可。
        • 注意 strlen(s+1) 返回的是字符串长度(从 s[1] 开始的有效字符数),而 s[length] 正好是最后一个字符的位置。

      ⏱️ 复杂度分析

      • 时间复杂度O(n)O(n),其中 n=Sn = |S|,主要来自 strlen 遍历字符串一次。
      • 空间复杂度O(n)O(n),用于存储输入字符串。

      💻 标准代码 (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
      上传者