Loading

上学迟到

题目描述

学校和 yyy 的家之间的距离为 \(s\) 米,而 yyy 以 \(v\) 米每分钟的速度匀速走向学校。

在上学的路上,yyy 还要额外花费 \(10\) 分钟的时间进行垃圾分类。

学校要求必须在上午 \(\textrm{8:00}\) 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。

由于路途遥远,yyy 可能不得不提前一天出发,但是提前的时间不会超过一天。

输入格式

一行两个正整数 \(s,v\),分别代表路程和速度。

输出格式

输出一个 \(24\) 小时制下的时间,代表 yyy 最晚的出发时间。

输出格式为 \(\texttt{HH:MM}\),分别代表该时间的时和分。必须输出两位,不足前面补 \(0\)

样例 #1

  • 样例输入 #1
100 99
  • 样例输出 #1
07:48

提示:对于 \(100\%\) 的数据,\(1 \le s,v \le 10^4\)

分析与题解

  • 小时与分钟属于不同的时间单位,需要统一单位运算,一般化成基本单位(例如分钟)
  • 出发时间与要求到校的时间间隔需要>=路上一共花的时间(包括扔垃圾)
  • 格式控制
  • 出发时间从后往前推(可能存在提前一天的情况),就存在两种情况,分别考虑即可
    • 提前
    • 不提前

参考代码

#include<iostream>
#include<cstdio>
using namespace std;
 
int main() 
{   
  int s, v; 
  cin>>s>>v;
  float walktime = s*1.0/v;	 
  int starttime = 480;
  int hh, mm; 
  while (1){
  	if (((8*60-starttime)*1.0) >= (walktime+10))
  		break;
  	else
  		starttime-=1;
  	}
      
  if (starttime>=0){
  	hh = starttime/60;            //直接根据当前时间(总的分钟数)化成小时和分钟表示
  	mm = starttime%60;
  }
	
  else{
  	hh=(24*60+starttime)/60;      //starttime为负,意味着提前一天(跨天)了,用当天的总的分钟数减去即可
  	mm=(24*60+starttime)%60;
    } 	

  printf("%02d:%02d",hh,mm);
  return 0;
}
posted @ 2017-08-09 15:12  Devinwon  阅读(1980)  评论(0编辑  收藏  举报