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

难度:普及-

题目描述

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

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

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

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

输入格式

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

输出格式

输出一个 2424 小时制下的时间,代表 yyy 最晚的出发时间。

输出格式为 HH:MMHH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 00。

输入输出样例

输入 #1                                                               

100 99

输出 #1

07:48

说明/提示

对于 100%100% 的数据,1≤s,v≤10^4。

思路

这个题有很多“坑”

特判一:如果有余数的话,那就+1

if(s%v==0) minute=s/v;
else minute=s/v+1;

特判二:整点程序会把12:00自动判断为11:60,所以在把分钟归0的同时把小时数+1

if(60-minute%60==60)cout<<((8+day*24)-hour)%24+1<<":00";

特判二:一个小时内的情况

if(minute<=60){								
		if(60-minute<10) cout<<"07:0"<<60-minute;
		else cout<<"07:"<<60-minute;
	}

完整代码

#include<bits/stdc++.h>							//万能头文件
using namespace std;										
int main(){										//主函数
	int s,v,minute,hour,day;					//定义,minute为分钟总数,hour是小时数,day计算天数
	cin>>s>>v;									//输入
	if(s%v==0) minute=s/v;						//除法处理
	else minute=s/v+1;							//如果s除以v有余数,那么“进一法”s/v+1 
	minute+=10;									//根据题目要求垃圾分类+10
	if(minute<=60){								//特判,一个小时内的情况
		if(60-minute<10) cout<<"07:0"<<60-minute;
												//如果分钟没有进十位,直接输出"07:0"+(60-minute)
		else cout<<"07:"<<60-minute;			//否则就输出"07:"+(60-minute) 
	}
	else{										//一小时外的情况 
		if(minute%60==0) hour=minute/60;		//如果minute是60的minute倍数,小时数+除法处理
		else hour=minute/60+1;					//否则“进一法”h=minute/60+1
		if((8-hour)<0){							//继续特判,超过8个小时
			if(hour%8==0) day=hour/8;			//如果hour是8的倍数,day=hour/8
			else day=hour/8+1;					//否则“进一法”day=hour/8+1 
			if(60-minute%60==60)				//如果60-minute%60==60,就输出cout<<((8+day*24)-hour)%24+1<<":00" 
				cout<<((8+day*24)-hour)%24+1<<":00";
												//判断整点
			else{
				if(60-(minute%60)<10) cout<<((8+day*24)-hour)%24<<":0"<<60-(minute%60);
												//判断小于10分钟的情况
				else cout<<((8+day*24)-hour)%24<<":"<<60-(minute%60);
			}
		}
		else{									//否则,就是8个小时以内的情况
			if(60-(minute%60)<10) cout<<"0"<<8-hour<<":0"<<60-(minute%60);
			else cout<<"0"<<8-hour<<":"<<60-(minute%60);
		}
	}
	return 0;									//程序结束,返回值为0
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值