洛谷新人做题记录
## P5707 【深基2.例12】上学迟到
这道题其实思维难度并不是很大,绊住我主要的原因是输出方式以及可以提前前一天走时的24小时时间进制转换。需要注意的一个点是,当需要的分钟不能整除时,进一位操作。因为题中问的是最晚什么时候出门。
这里给出两个思路:
- 算出需要的时间,从第二天早上8:00向前推;
- 算出总的时间,减去需要的时间,从第一天早上8:00向后推。
思路一:
我刚开始是第一种思路,但用第一种方法的时候需要将算出的分钟转换为时,还再需要判断是否小时数大于7。附上我完成一半的代码。
#include<iostream>
using namespace std;
int main()
{
int s,v;
cin>>s>>v;
int time,hour ,minutes,sum;
time=s/v+10;
if(s%v!=0)
time++;
if(time<60)
cout<<"07:"<<60-time;
else
{
hour=time/60;
minutes=time%60;
if(hour>=24)
cout<<"error";
if(hour<=7)
{
if(60-minutes<10)
cout<<"0"<<7-hour<<":0"<<60-minutes;
else
cout<<"0"<<7-hour<<":"<<60-minutes;
}
if(hour>7&&hour<24)
{
if(32-hour<10)
cout<<"0"<<32-hour<<":";//这样补0输出应该是无法通过第7个测试点
else
cout<<32-hour<<":"; //原谅我不太会看测试点 但这样输出属实过不去
if(60-minutes<10)
cout<<"0"<<60-minutes;
else
cout<<60-minutes;
}
}
return 0;
}
思路二:
不是很难想,不多做解释。
#include<iostream>
using namespace std;
int main()
{
int s,v;
cin>>s>>v;
int time,hour,minutes,sum;
time=s/v+10;
if(s%v!=0)
time++;
sum=24*60-time;//24小时一共的分钟数
if(sum<=0)
return 0;
hour=sum/60+8;
minutes=sum%60;
if(hour>=24)
hour=hour-24;
int a,b,c,d;
a=hour/10;//a,b,c,d存在的意义就是补0输出
b=hour%10;
c=minutes/10;
d=minutes%10;
cout<<a<<b<<":"<<c<<d;
return 0;
}
总结一下,这道题可能很简单,但确实花费了我一个小时的时间。当我第一次提交答案的时候,10个测试点只对了3个,第一次修改好时变成了6个测试点正确,到最后就剩下第7个测试点错误,这中间我修改了十几次,不断调试。最后提交通过的时候,真的很开心。