洛谷 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<


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章