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;
}

posted @ 2022-07-19 19:47  GitTJBKBeta  阅读(43)  评论(0编辑  收藏  举报