洛谷 P5707 题解
题目描述
学校和 yyy 的家之间的距离为 ss 米,而 yyy 以 vv 米每分钟的速度匀速走向学校。
在上学的路上,yyy 还要额外花费 1010 分钟的时间进行垃圾分类。
学校要求必须在上午 \textrm{8:00}8:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。
由于路途遥远,yyy 可能不得不提前一天出发,但是提前的时间不会超过一天。
输入格式
一行两个正整数 s,v,分别代表路程和速度。
输出格式
输出一个 24:24 小时制下的时间,代表 yyy 最晚的出发时间。
输出格式为 HH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 00。
输入输出样例
输入 #1复制
100 99
输出 #1复制
07:48
解析
可以用成堆的分支结构.
int n,m,t,ti,tj,tk;int hour = 60;cin>>n>>m;
n,m代表路程和时间,其他变量稍后再说.
if (n % m == 0) {t = n / m + 10;
}
else if (n % m != 0) {t = n / m + 11;
}
if (t % 60 == 0) {ti = t / 60;
}
else if (t % 60 != 0) {ti = t / 60 + 1;
}
其中,m代表每分钟行进多少米,因而用n mod m 求出值,如果能整除,那么将用10+n/m分钟到学校.如果不能,则将余下的时间再加1分钟,也就是11+n/m分钟.
这个分位是由8:00(7:60)-12分得到的,也就是7:48,所以ti就是代表有多少个60.
hour *= ti;
tj = hour - t;
if (8 - ti < 0) {tk = 8 - ti + 24;
}
else if (8 - ti >= 0) {tk = 8 - ti;
}
hour变量初始定义为60,60×ti-t(也就是前面的7:60,还可以6:120),这个分位就以新的hour值减去t得到的tj.
现在考虑前一天的情况,他可能于前一天出发,所以ti要是减到了昨天,就将他重置加24小时代表tk的值,就是时位.如果ti没减到昨天,那么直接减.
if (tk < 10 && tj < 10) {cout<<"0"<= 10 && tj < 10) {cout<= 10) {cout<<"0"<= 10 && tj >= 10) {cout<
最后是输出环节,如果tj或tk的值是一位数,则前面输出0,若没有,直接输出值.
AC代码
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main() {int n,m,t,ti,tj,tk;int hour = 60;cin>>n>>m;if (n % m == 0) {t = n / m + 10;}else if (n % m != 0) {t = n / m + 11;}if (t % 60 == 0) {ti = t / 60;}else if (t % 60 != 0) {ti = t / 60 + 1;}hour *= ti;tj = hour - t;if (8 - ti < 0) {tk = 8 - ti + 24;}else if (8 - ti >= 0) {tk = 8 - ti;}if (tk < 10 && tj < 10) {cout<<"0"<= 10 && tj < 10) {cout<= 10) {cout<<"0"<= 10 && tj >= 10) {cout<
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
