2018大疆校招软件岗位笔试题目(求有效工作时间)——未在线验证
2017-08-31 16:43
986 查看
题目
在DJI的工时打卡计算系统中,一个工作日的定义是由工作当日当天的凌晨03:00:00开始,到隔天凌晨03:00:00(不包含)为止。这其中,工作日当天的中午12:30:00到下午14:00:00(不包含)为午休时间,不计入工作时间。
Tom由于工作繁忙,担心自己有时候会忘记打卡,因此他每次经过打卡机到时候都会不由自主地打一次卡。为了更好的了解自己的工作情况,Tom找到了自己整个八月份的乱序打卡记录,但是这些数据不小心弄乱了,所以Tom想请你帮个忙。从给出的N条记录中,找出所有有效的打卡工作日(即在该工作日中打开次数>=2并且有效工作时间>0),并计算该工作日中的有效工作时间(按秒计算,除去打开时间内出现的午休时间)。其中工作日定义为当天3:00:00到次日2:59:59为当天工作日,即当天 2:59:59(包括)以前的打开记录当作前一天打开记录和有效工作时间,不计做当天的打开记录和有效工作时间。
输入
1208.10 01:00:00
08.09 23:59:59
08.10 17:00:00
08.10 18:00:00
08.01 01:00:00
08.01 04:00:00
08.03 10:00:00
08.03 12:29:59
08.04 10:00:00
08.04 12:30:00
08.07 01:00:00
08.07 02:00:00
输出
08.03 899908.04 9000
08.06 3600
08.09 3601
08.10 3600
小白只针对给出算例在本地进行验证,无误,输入输出未验证!!
解题思路:字符串按格式读取,将时间均转化为秒数,对各种情况进行分析。
#include <iostream> #include <string> #include <vector> using namespace std; #define REST_START 45000 //60*60*12+30*60 #define REST_END 50400 //60*60*14 #define START 10800 //60*60*3 #define END 86400 //60*60*24 #define REST 5400 //REST_END-REST_START void main() { int N;//数据量 vector<int> dayRecord[32];// 8月31天,vector从1~31对应日期 int workTime[32];// 记录每天的工作时间 cin >> N; if (getchar() == '\n') { ; } for (int i = 0; i < N; i++) { string str; int day = 0, hour, minute, second, time; getline(cin, str); sscanf_s(str.c_str(), "08.%d %d:%d:%d", &day, &hour, &minute, &second); time = hour * 60 * 60 + minute * 60 + second; if (time > REST_START&&time < REST_END) //如果是12:30:00~14:00:00 continue; else if (time < START) //如果处在00:00~02:59:59 { dayRecord[day - 1].push_back(time + END - REST); } else if (time >= REST_END) //如果在14:00:00之后 dayRecord[day].push_back(time - REST); else dayRecord[day].push_back(time); } for (int i = 1; i <= 31; i++)//计算每天工作时间 { int min = END + START, max = 0, size = dayRecord[i].size(); if (size < 2) //如果打卡次数小于2 { continue; } for (int j = 0; j < size; j++) { if (dayRecord[i][j] < min) min = dayRecord[i][j]; if (dayRecord[i][j]>max) max = dayRecord[i][j]; } workTime[i] = max - min; if (i < 10) printf("08:0%d %d\n", i, workTime[i]); else printf("08:%d %d\n", i, workTime[i]); } system("pause"); }
相关文章推荐
- 输入两个ip区间段,判断是否有交集【2018华为软件岗位笔试题目】
- 2018校招唯品会软件测试岗在线笔试
- 2018腾讯校招软件开发岗在线笔试题
- 2018小红书校招软件研发在线笔试编程第二题
- 中兴2016校招软件在线笔试题
- 2016 微软秋招(校招)在线笔试 题目1 : Farthest Point
- 2016 微软秋招(校招)在线笔试 题目234
- 中兴2016校招软件在线笔试题
- 2016联想校招软件开发类在线笔试真题
- 【2018校招笔试-京东=java开发】题目1括号匹配方案
- 大疆2018校招笔试题
- 华为2018届校园招聘笔试题目以及相应代码分享 软件开发岗位
- 京东2018校招在线笔试编程题①
- 阿里巴巴2015秋季校招(客户端开发工程师岗位)在线笔试题
- 2018-10月份-格科微电子 软件开发 笔试题目
- 2018----37在线笔试题目
- 网易互娱2018校招游戏研发工程师在线笔试
- [实战演练]腾讯2013年校招软件开发类笔试题目(选择题部分)
- 【8.29】阿里巴巴2014年校招(软件测试攻城师)笔试题目
- 【2018校招笔试-京东=java开发】题目2 求幂