P5707 【深基2.例12】上学迟到 解题过程(C++)

题目

题目分析

一眼望去,感觉这个题目很容易,很简单,大家也都有思路,但是提交后却都卡在50分,70分这几个分数上

大家解题目的直接思路

首先定变量v,s,t(yyy在上学路上所花的时间)

double s=0.0,v=0.0;

int s=0;

(至于这里s和v为什么为double类型等下会解释)

然后,我们可以把题目简单化,只要考虑分钟的事情就够了

因此,在一开始初始化的时候,我可以把t0(当天到达学校的最大时间)设置为(8*60-10)(这个10是倒垃圾的时间)

t0=8*60-10

 接下来是我们的t(yyy在上学路上所花的时间)

利用ceil()函数实现

t=ceil(s/v)

 ceil()这个函数实现的是向上取整的功能

如果我的s和v是double类型,那么s/v的值也是double类型,因此有便于我取整数,不用考虑是否因为两个int类型相除导致我原本有小数点,需要往前进一却没有

如果可以,你还可以使用int类型的s和v,并配合if分支结构,具体我不给出(小声bb:因为懒)

考虑情况

第一种:yyy当天能到达学校

也就是,yyy在上学路上所花的时间小于或等于当天到达学校的最大时间

if t<=t0

小时打算用这两个的差整除60,分钟就是这两个的差求余

cout<<((t0-t)/60)<<":"<<(t0-t)%60<<endl;

 第二种:yyy当天不能到达学校

也就是,yyy在上学路上所花的时间大于当天到达学校的最大时间

if t>t0

小时打算用这两个的差整除60,分钟就是这两个的差求余

cout<<((1440-(t-t0))/60)<<":"<<(1440-(t-t0))%60<<endl;

 好的,然后程序大功告成

可是却没有通过,这个是为什么呢?

这个题目的难点以及解题思路上的遗漏之处

解题思路看起来完整,但是这道题真正难的地方在于“输出格式”

用下面的值去调试你的程序:

输入:4650 10

输出:00:05

输入:4700 10

输出:00:00

输入:5290 10

输出: 23:01

如果在输出这一块输出的是0:5,那么你的程序将不会通过,这个并不符合输出格式

在“时”和“分”上,要注意是否小于10(是否只有一位)

并且还要注意冒号是否是在英文模式下的

程序

这里放一个我自己编写的程序:

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	//按分钟来计算,共470分钟(垃圾分类时间算进去了)
	int t,t0=470;
	double s,v;
	cin>>s>>v;
	//t是走路所花时间
	t=ceil(s/v);
    //yyy当天能到达学校
	if(t0-t>0)
		if((t0-t)%60<=10)//分为个位数
			cout<<"0"<<((t0-t)/60)<<":0"<<(t0-t)%60<<endl;
		else
			cout<<"0"<<((t0-t)/60)<<":"<<(t0-t)%60<<endl;
	else if(t0==t)
		cout<<"00:00"<<endl;
    //yyy当天不能到达学校
	else
		if((1440-(t-t0))%60<=10)//分为个位数
			cout<<((1440-(t-t0))/60)<<":0"<<(1440-(t-t0))%60<<endl;
		else
			cout<<((1440-(t-t0))/60)<<":"<<(1440-(t-t0))%60<<endl;
	return 0;
}

至此,已成艺术(bushi)

感谢大家来看我的文章(叼花) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值