题目: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;
}
京公网安备 11010502036488号