题目
题目分析
一眼望去,感觉这个题目很容易,很简单,大家也都有思路,但是提交后却都卡在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)
感谢大家来看我的文章(叼花)