C++洛谷题解(12)
题号:P5707
题名:上学迟到
题目:yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 s(s\le 10000)s(s≤10000) 米,而 yyy 可以以 v(v<10000)v(v<10000) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM
的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。
这道题其实和P1421有一点像,都需要转换格式,都需要大单位转小单位。不过这道题的“坑”稍微比P1421多一些。
首先把小时化成分钟,但由于可能会大于等于一天,所以分钟要加上24*60。
其次需要判断一个情况——如果当我们把该时间减去行走时间和垃圾分类后,判断剩下的时间是否大于一天,如果大于一天就减去一天的时间,但你必须向上取整,不然行走时间就会少。
最后,直接上代码:
#include<bits/stdc++.h>//万能头文件
using namespace std;
int main(){//程序入口
double s,v,m;//声明一些双精度变量
int n,t,a,b;//再声明一些整型变量
cin>>s>>v;//输入s和v的值
n=8*60+24*60;//计算n的值
t=ceil(s/v)+10;//计算t的值
n=n-t;//重新计算n的值
if(n>=24*60){//判断如果大于一天
n-=24*60;//那么天数减少一天
}//虽然这种情况几乎不会出现
b=n%60;//计算分钟数
a=n/60;//计算小时数
if(a<10){//如果小时小于10
if(b<10){//如果分钟小于10
cout<<"0"<<a<<":0"<<b;//输出分钟大于10的情况
}else{//否则
cout<<"0"<<a<<":"<<b;//直接输出
}
}else{//如果小时大于10
if(b<10){//如果分钟小于10
cout<<a<<":0"<<b;//输出相关情况代码
}else{//否则
cout<<a<<":"<<b;//直接输出
}
}//必须要进这个判断语句
return 0;
}
为了更加容易复制而不雷同,所以专门制作了复制版
复制版:
#include<bits/stdc++.h>
using namespace std;
int main(){
double s,v,m;
int n,t,a,b;
cin>>s>>v;
n=8*60+24*60;
t=ceil(s/v)+10;
n=n-t;
if(n>=24*60){
n-=24*60;
}
b=n%60;
a=n/60;
if(a<10){
if(b<10){
cout<<"0"<<a<<":0"<<b;
}else{
cout<<"0"<<a<<":"<<b;
}
}else{
if(b<10){
cout<<a<<":0"<<b;
}else{
cout<<a<<":"<<b;
}
}
return 0;
}