题目描述
学校和 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"<<tk<<":"<<"0"<<tj<<endl;
}
else if (tk >= 10 && tj < 10) {
cout<<tk<<":"<<"0"<<tj<<endl;
}
else if (tk < 10 && tj >= 10) {
cout<<"0"<<tk<<":"<<tj<<endl;
}
else if (tk >= 10 && tj >= 10) {
cout<<tk<<":"<<tj<<endl;
}
最后是输出环节,如果tj或tk的值是一位数,则前面输出0,若没有,直接输出值.
AC代码
#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <cstring>
#include <string>
#include <algorithm>
#include <cstdlib>
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"<<tk<<":"<<"0"<<tj<<endl;
}
else if (tk >= 10 && tj < 10) {
cout<<tk<<":"<<"0"<<tj<<endl;
}
else if (tk < 10 && tj >= 10) {
cout<<"0"<<tk<<":"<<tj<<endl;
}
else if (tk >= 10 && tj >= 10) {
cout<<tk<<":"<<tj<<endl;
}
return 0;
}