本文主要是介绍004 A+B问题 【练习-详解上学迟到】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
零基础c++教程004 A+B问题 【练习-详解上学迟到】
- 今天,我们做一道比较有难度的题,这道题有许多需要考虑到的点,需要我们逐一击破。
- 题目提交链接:上学迟到
- 题目搬运:
题目描述
学校和 yyy 的家之间的距离为 s s s 米,而 yyy 以 v v v 米每分钟的速度匀速走向学校。 在上学的路上,yyy 还要额外花费 10 10 10 分钟的时间进行垃圾分类。 学校要求必须在上午 8:00 \textrm{8:00} 8:00 到达,请计算在不迟到的前提下,yyy最晚能什么时候出门。 由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。
输入格式
一行两个正整数 s , v s,v s,v,分别代表路程和速度。
输出格式
输出一个 24 24 24 小时制下的时间,代表 yyy 最晚的出发时间。 输出格式为 HH:MM \texttt{HH:MM} HH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 0 0 0。
样例输入
100 99
样例输出
07:48
提示
对于 100 % 100\% 100% 的数据, 1 ≤ s , v ≤ 1 0 4 1 \le s,v \le 10^4 1≤s,v≤104。
思路-初版
- 我们可以定义一个变量times(为什么不用time呢?因为time是一个的名字,不能当变量名),表示我们的出发时间,又因为这里时间的最小单位是分钟,所以times的单位就定为分钟。
- 这道题说了:“提前的时间不超过一天。”所以,times的初始值可以定为 8 × 60 + 24 × 60 = 1920 min 8\times60+24\times60=1920\min 8×60+24×60=1920min,从前一天的0点算起,到这一天上午8点的时间。
- 提前的时间就是垃圾分类的10分钟加上去学校的时间,也就是 s ÷ v s\div v s÷v在时间的基础上减去就行了。
- 时间要变成24小时制的小时和分钟。由于不算天数,所以时间要在24小时也就是 24 × 60 = 1440 min 24\times60=1440\min 24×60=1440min以内。接着,小时数就是 总 分 钟 数 ÷ 60 总分钟数\div60 总分钟数÷60(int类型下,他会自动取证),分钟数就是 总 分 钟 数 % 60 总分钟数\%60 总分钟数%60。
- 输出时,由于要两位,前面要加前导0,就要用到我们的“%02d”。
初版代码
#include <iostream>
using namespace std;
int main()
{int s,v,times=1920,hh,mm;scanf("%d%d",&s,&v);times=times-10-s/v;times%=1440;hh=times/60;mm=times%60;printf("%02d:%02d",hh,mm);return 0;
}
- 结果它就… 红了一片!(AC代表正确,WA代表错误)
思路-终极版
- 这是因为,int类型除出来的是默认向下取整的,而要“提前一点”,需要向上取整。这是我们就要用到小数和向上取整——ceil。
ceil
- ceil是用来向上取整的一个东东,可以将一个小数变成比这个小数大的最小整数。
- 它还有一个同伴,向下取整——floor,不过默认是向下取整,所以我们就不经常用它。
- 它们都是数学相关的东西,所以要
include <cmath>
(cmath是c++里关于数学的一个头文件)
新的操作符
- 为了方便我们写这一行代码:
a=a-3
,我们可以把它改成这样:a-=3
,这叫做减等于。 - 同样的,还有加等于,乘等于,除等于,mod等于——
a+=2
,a*=5
,a/=4
,a%=6
。 - 如果这样被操作的数(后面的数)是1,还可以更简写成这样:
a++
,a--
(a**
,a//
没必要,也不能用)。
终极代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{double s,v;int times=1920,hh,mm;scanf("%lf%lf",&s,&v);times-=10+ceil(s/v);times%=24*60;hh=times/60;mm=times%60;printf("%02d:%02d",hh,mm);return 0;
}
- 终于一片绿了!
今天就讲到这里,大家一定要提高自己的分析能力!
这篇关于004 A+B问题 【练习-详解上学迟到】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!