题目
题解
#include<bits/stdc++.h>
using namespace std;
int main(){
int s,v,t;
cin >>s>>v;
//计算路途时间
if(s%v==0){
t=s/v+10;
}
else{
t=s/v+10+1;
}
int h1,h2; //定义小时和分钟
if(t<8*60){ //时间小于8h
h1=(480-t)/60;
h2=(480-t)%60;
}
else{ //时间大于8h
h1=(24*60-(t-480))/60;
h2=(24*60-(t-480))%60;
}
//时间补0
if(h1<10){
if(h2<10){
cout<<"0"<<h1<<":"<<"0"<<h2; //情况1 05:01
}
else{
cout<<"0"<<h1<<":"<<h2; //情况2 05:10
}
}
else{
if(h2<10){
cout<<h1<<":"<<"0"<<h2; //情况3 10:05
}
else{
cout<<h1<<":"<<h2; //情况4 10:10
}
}
return 0;
}
主要坑很多
1. 路程/速度如果不是整数,要+1处理,否则会迟到,第一次分情况讨论
2. 路程时间是否在8小时内,便于计数。8时间内即出发时间的小时位置为1~8(如 5:30;8小时以上就要头一天出发,出发时间的小时位置为1~24(如22:40),第二次分情况讨论
3. 如何由路程时间倒推出发时间,涉及到时间的加减计算,统一先转换成分钟,减去路程时间,剩余分钟再转换成小时,(小时位置用/60,分钟位置用%60)这里一定要想清楚,计算方法
4. 最后就是如何表示出发时间,分四种情况,第三次矩阵分类讨论,用到了嵌套循环
》小时补0,分钟补0
》小时补0,分钟不补0
》小时不补0,分钟补0
》小时不补0,分钟不补0
这样思路就很清晰了
最后检查末尾分号,花括号配对
写完神清气爽
哈哈哈哈嗝
本来心急,想直接看题解,发现看不懂,而且好长,这个题就搁到最后了
之后干脆自己写,一边写,一边用笔打草稿计算时间,写了45分钟
当时不抱着写对的希望,想试着看看,结果一次成功,谁懂啊啊啊啊,当时人傻了,又很激动!!!!!!!!!!!!
最后,希望各位小白能独立思考,相信自己,你一定可以写对的,你我共勉!!!!!!!!
(。・∀・)ノ゙嗨,我意识到天外有天,人外有人了
请看以下题解
#include <cstdio>
#include<cmath>
using namespace std;
int main(){
int s,v;
scanf("%d%d", &s, &v);
int time_walk = ceil(1.0*s/v)+10; //两次类型转换,一次1.0强制整数转浮点数,第二次ceil函数向上取整
int from_zero =60*(8+24)-time_walk; //计算到前一天0点的时间
int hh=(from_zero/60)%24; //计算小时
int mm=from_zero%60; //计算分钟
printf("%02d:%02d\n", hh, mm); //本题解最妙的地方,就是%02d占位符的意思,输出至少2位整数,如果不足两位,前面用0补齐
return 0;
}
这是我见过最简单的题解了,没有循环,没有分类讨论,