欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
附上汇总帖:GESP认证C++编程真题解析 | 汇总
【题目来源】
洛谷:B4260 [GESP202503 二级] 时间跨越 - 洛谷 (luogu.com.cn)
【题目描述】
假设现在是y yy年m mm月d dd日h hh时而k kk小时后是y ′ y'y′年m ′ m'm′月d ′ d'd′日h ′ h'h′时,对于给定的y , m , d , h , k y,m,d,h,ky,m,d,h,k,小杨想请你帮他计算出对应的y ′ , m ′ , d ′ , h ′ y',m',d',h'y′,m′,d′,h′是多少。
【输入】
输入包含五行,每行一个正整数,分别代表y , m , d , h , k y,m,d,h,ky,m,d,h,k。
【输出】
输出四个正整数,代表y ′ , m ′ , d ′ , h ′ y',m',d',h'y′,m′,d′,h′。
【输入样例】
2008 2 28 23 1【输出样例】
2008 2 29 0【算法标签】
《洛谷 B4260 时间跨越》 #分支结构# #GESP# #2025#
【代码详解】
#include<bits/stdc++.h>usingnamespacestd;inty,m,d,h,k;// 定义变量:年、月、日、小时、增加的小时数intmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};// 每月的天数intmain(){// 输入初始日期和时间cin>>y>>m>>d>>h>>k;// 判断是否为闰年,如果是则2月有29天if(y%4==0&&y%100!=0||y%400==0)month[2]=29;// 计算增加k小时后的时间inth1=(h+k)%24;// 新小时数intd1=d+(h+k)/24;// 新天数(可能超过当月天数)// 处理天数超过当月天数的情况if(d1>month[m]){d1=d1-month[m];// 减去当月天数m++;// 月份加1}// 处理月份超过12的情况if(m>12){y++;// 年份加1m=1;// 月份重置为1月}// 输出新的日期和时间cout<<y<<" "<<m<<" "<<d1<<" "<<h1<<endl;return0;}【运行结果】
2008 2 28 23 1 2008 2 29 0