题解 P5707 【深基2.例12】上学迟到

博客园迁移计划

(题面来自洛谷

题目描述

yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 $s$($s\le 10000$) 米,而 yyy 可以以 $v$($v<10000$) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。

输入格式

两个正整数 s,v,意思已经在题目中给定。

输出格式

hh:mm 表示最晚离开家的时间(时:分,必须输出两位,不足两位前面补0)

输入输出样例

输入 #1

100 99

输出 #1

07:48

分析

小学的匀速直线运动问题,t=s/v

但是有几个小细节

1.不要忘了加上10分钟

2.怎么输出HH:MM的格式?

试了一下像保留小数点一样使用C的标准输入输出(Xchkoo口中所说的“那套老掉牙的cstdio”)的占位符,居然啪一下就行了

3.怎么处理时分进位?60进制,因为不知道进几次所以用while循环实现就行了

4.s/v有小数点怎么办?不能四舍五入,只能向上取整,因为迟到0.000000000001分钟也是迟到。

5.千米迢迢上学的yyy问题:八个小时都到不了学校怎么办?当h自减变为-1的时候将h赋值为23即可,由于不可能提前超过一天出发(某学生连续赶路30余小时猝死)所以if即可

6.h及m的计算问题:我的做法是赋初值08:00然后往回倒减分钟数,然后进位到小时位

7.为什么要发水题的题解?这样比较容易坚持每天刷题===

最近在我身上发生了很多事,但是不想放弃OI。

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include<bits/stdc++.h>
using namespace std;
int main() {
	int s,v;
	cin>>s>>v;
	int t=ceil(1.0*s/v);
	int h=8,m=-t-10;
	while(m<=0) {
		m+=60;
		h--;
		if(h<0) h=23;
	}
	printf("%.2d:%.2d",h,m);
	return 0;
}

编辑记录

2021-08-06 18:11:00

主站由 Vercel 驱动,如遇需使用 IPv6 或主站无法访问请访问托管于 GitHub Pages 的镜像(实时同步)。
由于 Pages 的局限性,我引入了 Google Analytics 来收集访问数据;这些数据只是我自己看着玩的,不会被泄露;
您大可屏蔽它的 Cookie,这不会影响您浏览本站的所有内容或发表评论。
本站支持 IPv6 网络。
萌ICP备 20213003号
Built with Hugo
主题 StackJimmy 设计