比较复杂的题

题目

题解

#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;
}

 这是我见过最简单的题解了,没有循环,没有分类讨论,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值