1 条题解
-
0
G2018 [GESP202503 二级] 时间跨越 题解
知识点:日期模拟、闰年判断、进位处理。
解题思路
先给小时加k,满24则进一天;日期超过本月天数时进入下个月,月份超过12则进入下一年。二月按闰年规则求天数。
为什么正确
按小时、日、月依次进位,保证每个量落在对应合法范围,新时刻与增加的小时数一致。
易错点
当前代码利用题目k的范围最多跨一天;扩展到更大的k须循环进位,世纪闰年也需正确判断。
复杂度
本题时间O(1),空间O(1)。
参考代码(C++17)
#include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int y,m,d,h,k; cin>>y>>m>>d>>h>>k; h+=k; if(h>=24) { h-=24; d++; int ds[]= { 0,31,28,31,30,31,30,31,31,30,31,30,31 } ; int days=ds[m]+(m==2&&(y%400==0||(y%4==0&&y%100!=0))); if(d>days) { d=1; m++; if(m==13) { m=1; y++; } } } cout<<y<<" "<<m<<" "<<d<<" "<<h; }说明
本题解为配套教学整理,非官方题解。复杂度按本页参考实现计算,题库使用10个自行生成的测试点。
- 1