难度:普及-
题目描述
学校和 yyy 的家之间的距离为 s 米,而 yyy 以 v 米每分钟的速度匀速走向学校。
在上学的路上,yyy 还要额外花费 1010 分钟的时间进行垃圾分类。
学校要求必须在上午 8:008:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。
由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。
输入格式
一行两个正整数 s,v,分别代表路程和速度。
输出格式
输出一个 2424 小时制下的时间,代表 yyy 最晚的出发时间。
输出格式为 HH:MMHH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 00。
输入输出样例
输入 #1
100 99
输出 #1
07:48
说明/提示
对于 100%100% 的数据,1≤s,v≤10^4。
思路
这个题有很多“坑”
特判一:如果有余数的话,那就+1
if(s%v==0) minute=s/v;
else minute=s/v+1;
特判二:整点程序会把12:00自动判断为11:60,所以在把分钟归0的同时把小时数+1
if(60-minute%60==60)cout<<((8+day*24)-hour)%24+1<<":00";
特判二:一个小时内的情况
if(minute<=60){
if(60-minute<10) cout<<"07:0"<<60-minute;
else cout<<"07:"<<60-minute;
}
完整代码
#include<bits/stdc++.h> //万能头文件
using namespace std;
int main(){ //主函数
int s,v,minute,hour,day; //定义,minute为分钟总数,hour是小时数,day计算天数
cin>>s>>v; //输入
if(s%v==0) minute=s/v; //除法处理
else minute=s/v+1; //如果s除以v有余数,那么“进一法”s/v+1
minute+=10; //根据题目要求垃圾分类+10
if(minute<=60){ //特判,一个小时内的情况
if(60-minute<10) cout<<"07:0"<<60-minute;
//如果分钟没有进十位,直接输出"07:0"+(60-minute)
else cout<<"07:"<<60-minute; //否则就输出"07:"+(60-minute)
}
else{ //一小时外的情况
if(minute%60==0) hour=minute/60; //如果minute是60的minute倍数,小时数+除法处理
else hour=minute/60+1; //否则“进一法”h=minute/60+1
if((8-hour)<0){ //继续特判,超过8个小时
if(hour%8==0) day=hour/8; //如果hour是8的倍数,day=hour/8
else day=hour/8+1; //否则“进一法”day=hour/8+1
if(60-minute%60==60) //如果60-minute%60==60,就输出cout<<((8+day*24)-hour)%24+1<<":00"
cout<<((8+day*24)-hour)%24+1<<":00";
//判断整点
else{
if(60-(minute%60)<10) cout<<((8+day*24)-hour)%24<<":0"<<60-(minute%60);
//判断小于10分钟的情况
else cout<<((8+day*24)-hour)%24<<":"<<60-(minute%60);
}
}
else{ //否则,就是8个小时以内的情况
if(60-(minute%60)<10) cout<<"0"<<8-hour<<":0"<<60-(minute%60);
else cout<<"0"<<8-hour<<":"<<60-(minute%60);
}
}
return 0; //程序结束,返回值为0
}