题目:Stay up Late and Wake up Early
来源:第三届中国计量大学ACM程序设计竞赛个人赛(同步赛)
解题思路
Gyro 需要在 hh:mm
时间起床,他在“幸运时间”设置闹钟,闹钟每隔 x
分钟响一次,如果没到起床时间,Gyro 就按一次睡眠按钮。
求按睡眠按钮的最少次数 y
,并输出幸运时间。
幸运时间定义:包含数字 7。闹钟设置为 24 小时,23:59
后一秒的时间为 00:00
。
数字 7 只能出现在 minute
的个位数上或者 hour
的个位数上。
将当前时间减去 x
分钟,直至得到的时间是幸运时间为止。
C++代码
#include<iostream> using namespace std; string luckyTime(int x, string time){ int hour = stoi(time.substr(0, 2)); int minute = stoi(time.substr(3, 2)); int y = 0; while(minute % 10 != 7 && hour % 10 != 7){ if(minute >= x) minute -= x; else{ minute += 60; minute -= x; hour += 24; hour -= 1; hour %= 24; } ++y; } string ans = to_string(y) + " "; string sh = to_string(hour); if(sh.size() == 1) sh = "0" + sh; ans += sh + ":"; string sm = to_string(minute); if(sm.size() == 1) sm = "0" + sm; ans += sm; return ans; } int main(){ int T; cin >> T; while(T){ int x; string wakeTime; cin >> x >> wakeTime; cout << luckyTime(x, wakeTime) << endl; --T; } return 0; }