蓝桥杯_工作时长_C++
- 题目描述:
- 题解:
- 解题思路:
- 思路:
- 代码实现
题目描述:
工作时长原题链接
题解:
解题思路:
思路:
1、注意这是一道填空题,所以只需要输出最后答案即可。
题目分析:
输入为上下班的时间,格式为(yyyy-MM-dd HH:mm:ss)
第一条为上班时间
第二条为下班时间
第三条为上班时间
…
① 需要计算工作时长,工作时长= 所有(下班时间-上班时间)(单位为秒)
通过所提供的案例发现均为2022年的上班记录,计算工作时长是可将2022年作为时间基准,将上下班时间转换为秒。
例:2022-01-01 12:00:05
01-01 可转换为 24小时,(24+12)*60 可转换为分钟,(24+12)6060可转换为秒,(24+12)6060+5 为以2022为基准的时间
② 这里需注意每个月的天数,闰年 2 月有 29 天,非闰年28天(闰年的判断能被 4 整数不能被 100 整除的是闰年,或者能被 400 整除的是闰年)。2022为非闰年
③在进行数据输入时(yyyy-MM-dd HH:mm:ss),是有一定的格式的。可采用如下形式进行输入(当读取文件末尾或者手动输入Ctrl+c 时 while 结束)
while(scanf("%d-%d-%d %d:%d:%d",&year,&month,&day,&h,&m,&s)==6){}代码实现
#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;// 阻止在此判断闰年的类型intyear,month,day,h,m,s;intmain(){// days数组用来存储每个月的天数,索引从0到12(0为虚拟值)vector<int>days={0,31,28,31,30,31,30,31,31,30,31,30,31};vector<int>v;// 循环读取输入,格式为 "YYYY-MM-DD HH:MM:SS"// 只有在成功读取到6个值时,循环才会继续while(scanf("%d-%d-%d %d:%d:%d",&year,&month,&day,&h,&m,&s)==6){intsum=0;// 计算输入日期之前的所有月份的天数for(inti=0;i<month;i++){sum+=days[i];// 将每个月的天数累加到sum中}// 加上当前月份的天数sum+=day;// 计算已过去的秒数sum*=24;// 转换为小时sum+=h;// 加上小时sum*=60;// 转换为分钟sum+=m;// 加上分钟sum*=60;// 转换为秒sum+=s;// 加上秒// 将计算得到的总秒数存入向量v中v.push_back(sum);}// 对总秒数进行排序sort(v.begin(),v.end());intans=0;// 计算时间间隔for(inti=0;i<v.size();i+=2){ans+=v[i+1]-v[i];// 将每对时间的差值累加到ans中}// 输出所有时间段的总秒数cout<<ans;return0;}蓝桥杯_工作时长_原题链接
欢迎大家和我沟通交流(✿◠‿◠)