算法学习(专题1---顺序结构)

题目分享:(洛谷P5707 上学迟到)

这道题出自洛谷题单---顺序结构中的一道题,这道题相对来说较为基础,考察了程序设计语言中最基础的顺序结构和选择结构,并不涉及很复杂的算法思想,但是需要理清思路,以下是笔者的一些想法和见解:

因为整个时间跨度是从今天的8:00到昨天的8:00,所以就涉及到了要考虑是否需要跨天,怎么判断是否需要跨天呢,可以利用给到的s和v算出这名同学需要走到学校的时间。注意,这里还有10分钟的垃圾分类时间,但是咱们先不管它。

先定义变量:

1.restMinute:该同学走到学校的时间

2.hour,minute:该同学走到学校需要花费的小时和分钟

3.h,m:最后的结果

以下是解题步骤:

(1)判断s和v能否整除,若能,则需要提前的时间restMinute = s/v;若不能,restMinute = s/v+1(不能迟到,所以要往前1分钟);

(2)得出的restMinute单位是分钟,所以我们要判断有多少个小时,多少分钟,那么就令hour为restMinute/60,则minute为restMinute%60;

(3)接下来我们要判断是否需要跨天,如果小时数hour大于7,则需要跨天,h = 24 - (hour-7) = 31 - hour;否则的话, h = 7 - hour;

(4)判断完小时后,就是分钟了,先把需要走到学校的时间减去,即 m = 60 - minute;

(5)最后我们要考虑那10分钟的垃圾分类时间啦,如果最后这个结果m大于10,那直接减去10就好了,但是如果小于10的话,就要往前一个小时跨了,此时需要分类讨论:

5.1 如果h不为0,即不是在00:xx的时候,直接让h-1就好了

5.2如果恰好h=0,即时间恰好在00:xx的时候,就要往前一天跨了,直接让h=23就好了

最后因为m<10,所以 m = 60-(10-m) =50 + m 。

(6)最后输出结果就行,别忘记不满两位的要补0

接下来放代码:

 

#include<iostream>
#include<cstdio>
using namespace std;
int h,m;
int main()
{
	int s,v;
	cin>>s>>v;
	int restMinute;
	if(s%v==0) restMinute = s/v;
	else restMinute = s/v +1;//步骤(1) 
	int hour = restMinute/60;
	int minute = restMinute%60;//步骤(2) 
	if(hour>7)
	{
		 h = 31-hour;	
	} 
	else
	{
		 h = 7-hour;
	}//步骤(3) 
	int m = 60 -minute;//步骤(4) 
	if(m>=10)
	{
		m = m-10;
	}//步骤(5) 
	else
	{
		m = 50+m;
		if(h>0)
		{
			h-=1;
		}//步骤(5)---5.1 
		else
		{
			h = 23;
		}//步骤(5)---5.2 
	}
	if(h<10&&m>=10)
	{
		printf("0%d:%d",h,m);
	}
	else if(h<10&&m<10)
	{
		printf("0%d:0%d",h,m);
	}
	else if(h>=10&&m<10)
	{
		printf("%d:0%d",h,m);
	}
	else
	{
		printf("%d:%d",h,m);
	}//步骤(6) 
	return 0;
 } 

以上是个人的一些分享,由于个人是初学者小白,如果有错误,请大家及时纠正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值