【洛谷】p5707上学迟到 C语言

发布于:2022-11-06 ⋅ 阅读:(229) ⋅ 点赞:(0)

上学迟到

一道很简单的题,但确实容易踩坑,不过只要思路清晰就能规避,这里我通过对选择结构的运用,来提供一种思路简单又清晰的解题方法。

题目描述

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

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

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

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

输入格式

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

输出格式

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

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

输入输出样例

输入 #1

100 99

输出 #1

07:48

注意

1.不要忘记进行垃圾分类要花的10分钟

2.注意观察输入和输出样例,根据题目要求,走路所需时间应为99/100=1.01(分钟),而输出样例却表示走路花了2分钟,说明走路所需时间要向上取整,有如下两种方案

(1)利用选择结构,若s%v!=0,则所需时间+1

	if(s%v!=0)
	{
		time = s/v+1+10;
	}else
	{
		time = s/v+10;
	}

(2)利用ceil函数进行向上取整(不要忘记调用math.h哦),如果我们给s和v定义的类型是int的话,还要注意格式的转换

time = ceil(s*1.0/v)+10;

 若只是s/v,ceil函数括号里面就取的是一个整数,这还怎么向上取整呀,这里给s乘上一个1.0,通过自动类型转换,括号内取得的是一个小数,就向上取整啦,否则ceil(100/99)还是1,而不是我们所想要的2了

3.时间不足两位的时候要补零,而且是时和分都要补零,还要注意整点时的输出(我刚开始只给小时补零了,就一直出错)

4.有可能会提前一天出发

思路

先算出要提前多久,然后计算出发时间

为了方便计算,我们把8:00转化为分钟制,8*60=480,同时因为有可能提前一天出发,干脆再加24*60分钟

这样的好处是,如果真的要提前一天出发的话,直接用8*60+24*60减去要提前的时间,就直接得到了前一天出发时间的分钟制,如果不用提前一天走,还要减去那多加的24个小时,就得到了当天出发时间的分钟制

接下来就很简单啦

int schooltime = (24+8)*60;
	
gotime = schooltime - time;
	
if(time<8*60)//不需要提前一天走的情况下
{
	gotime -= 24*60;
}
int h = gotime/60;
int m = gotime%60;

之后通过一个选择结构控制一下输出就可以了,完整代码如下

#include<stdio.h>
int main()
{
	int s,v;
	scanf("%d %d",&s,&v);
	int schooltime = (24+8)*60;
	
	int time;
	
	if(s%v!=0)//计算需要提前的时间
	{
		time = s/v+1+10;
	}else
	{
		time = s/v+10;
	}
	
	int gotime = schooltime - time;//计算出发时间的分钟制
	
	if(time<8*60)
	{
		gotime -= 24*60;
	}
	
	int h = gotime/60;//转化为24小时制
	int m = gotime%60;
	
	if(h<10)//对结果进行输出,先输出小时,再输出分钟,这样更清晰 
	{
		printf("0%d:",h);//不足两位用零补位 
	}else 
	{
		printf("%d:",h); 
	}
	
	if(m<10)
	{
		printf("0%d",m);//若m=0,输出的是00,就不用担心整点的问题了 
	}else
	{
		printf("%d",m);
	} 
	
	return 0;
}

 

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到