欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > [特殊字符] 2025蓝桥杯备赛Day14——P8752 [蓝桥杯 2021 省 B2] 特殊年份

[特殊字符] 2025蓝桥杯备赛Day14——P8752 [蓝桥杯 2021 省 B2] 特殊年份

2025/4/1 3:21:28 来源:https://blog.csdn.net/m0_74849460/article/details/146526418  浏览:    关键词:[特殊字符] 2025蓝桥杯备赛Day14——P8752 [蓝桥杯 2021 省 B2] 特殊年份

🔍 2025蓝桥杯备赛Day14——P8752 [蓝桥杯 2021 省 B2] 特殊年份

P8752 [蓝桥杯 2021 省 B2] 特殊年份

题目描述

今年是 2021 年,2021 这个数字非常特殊, 它的千位和十位相等, 个位比百位大 1 1 1,我们称满足这样条件的年份为特殊年份。

输入 5 5 5 个年份,请计算这里面有多少个特殊年份。

输入格式

输入 5 5 5 行,每行一个 4 4 4 位十进制数(数值范围为 1000 1000 1000 9999 9999 9999),表示一个年份。

输出格式

输出一个整数,表示输入的 5 5 5 个年份中有多少个特殊年份。

输入输出样例 #1

输入 #1

2019
2021
1920
2120
9899

输出 #1

2

说明/提示

【样例说明】

2021 和 9899 是特殊年份,其它不是特殊年份。

蓝桥杯 2021 第二轮省赛 B 组 F 题。

🛠️ 解法一:字符串解析法(高效竞赛写法)

🔥 核心思路

直接通过 字符串索引 访问各位字符,利用 ASCII码运算 简化逻辑。无需数学计算,适合竞赛快速编码。

📝 代码实现

#include <iostream>
using namespace std;int main() {int ans = 0;for (int i = 0; i < 5; ++i) {string s;cin >> s;// 千位s[0] == 十位s[2] 且 个位s[3] == 百位s[1]+1if (s[0] == s[2] && s[3] == s[1] + 1) ans++;}cout << ans << endl;return 0;
}

🌟 代码解析

  • 字符索引

    :四位数年份作为字符串输入,索引对应关系:

    s = "2021"
    s[0] → '2' (千位)
    s[1] → '0' (百位)
    s[2] → '2' (十位)
    s[3] → '1' (个位)
    
  • ASCII码运算s[3] == s[1] + 1 等效于数值运算: 个位数值=百位数值+1个位数值=百位数值+1

优势

  • 高效快速:无复杂计算,直接访问字符
  • 📉 低内存消耗:无需额外存储结构
  • 🎯 代码简洁:适合竞赛场景快速实现

🛠️ 解法二:数值拆解法(直观数学思路)

🔥 核心思路

通过 数学运算 分解四位数,逐位提取数值。逻辑清晰,适合教学或理解位数处理原理。

📝 代码实现

#include <iostream>
using namespace std;int main() {int ans = 0;for (int i = 0; i < 5; ++i) {int year;cin >> year;// 数学拆解各位数值int thousand = year / 1000;        // 千位int hundred  = (year / 100) % 10;  // 百位int ten      = (year / 10) % 10;   // 十位int one      = year % 10;          // 个位// 判断条件if (thousand == ten && one == hundred + 1) ans++;}cout << ans << endl;return 0;
}

🌟 代码解析

  • 数值拆解公式

千位=⌊year1000⌋
百位=⌊year100⌋%10
十位=⌊year10⌋% 10
个位=year%  10

优势

  • 📚 逻辑直观:明确展示数学拆解过程
  • 🔧 扩展性强:适用于需要灵活处理位数的变种题
  • 📖 教学友好:适合初学者理解位数运算原理

⚖️ 双解法对比

维度字符串解析法数值拆解法
运算效率⚡ 更优(无除法/取模)⏳ 稍慢(需多次数学运算)
代码可读性🧠 需理解ASCII码运算📊 直观展示数学逻辑
适用场景🏆 竞赛快速解题🎓 教学/需明确数学逻辑
内存占用💾 O(1)💾 O(1)

🔍 测试用例验证

📥 输入样例

 2019   → 2≠1 ❌
2021   → 2=2 ✔️, 1=0+1 ✔️
1920   → 1≠2 ❌
2120   → 2=2 ✔️, 0≠1+1 ❌
9899   → 9=9 ✔️, 9=8+1 ✔️

📝 总结与扩展

🚀 性能优化技巧

  1. 输入加速

    (C++):

    ios::sync_with_stdio(false); // 关闭同步流
    cin.tie(0);                  // 解除cin与cout绑定
    
  2. 防御性编程

    if (s.length() != 4) {       // 确保输入合法性cerr << "Invalid input!";continue;
    }
    

💡 举一反三

  • 变种题1:若条件改为“百位等于个位且千位比十位大2”,如何修改代码?
  • 变种题2:若年份为五位数或六位数,数值拆解法如何调整?

📚 附录:四位数拆解公式表

数位数学公式示例(2021)
千位year / 10002021/1000=2
百位(year / 100) % 10(2021/100)=20 → 20%10=0
十位(year / 10) % 10(2021/10)=202 → 202%10=2
个位year % 102021%10=1

竞赛场景优先字符串解析法,追求极致效率;
教学场景推荐数值拆解法,深入理解数学逻辑。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词