2 条题解

  • 2
    @ 2024-2-2 16:25:47

    世界上最好的题解😄

    #include<iostream>
    using namespace std;
    int main(){
    	int s=0,v=0,t=10,h=7;
    	cin>>s>>v;
    	if(s%v==0)t+=s/v;
    	else t+=(s/v+1);
    	h-=t/60;
    	h=h<0?h+24:h;
    	t=60-(t%60);
    	if(h>=10)if(t==1)cout<<"0"<<h<<":00";
    	else if(t>=10)cout<<h<<":"<<t;
    	else cout<<h<<":0"<<t;
    	else if(t==60)cout<<"0"<<h<<":00";
    	else if(t>=10)cout<<"0"<<h<<":"<<t;
    	else cout<<"0"<<h<<":0"<<t;
    	return 0;
    }
    

    看完别忘了点赞呦👀️

    • 0
      @ 2023-10-28 11:41:56

      前往我的博客阅读体验更佳

      题目描述

      yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 ss(s10000s\le 10000) 米,而 yyy 可以以 vv(v<10000v<10000) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。

      输入格式

      两个正整数 s,v,意思已经在题目中给定。

      输出格式

      hh:mm 表示最晚离开家的时间(时:分,必须输出两位,不足两位前面补0)

      输入输出样例

      输入 #1

      100 99

      输出 #1

      07:48

      分析

      小学的匀速直线运动问题,t=s/v

      但是有几个小细节

      1. 不要忘了加上10分钟

      2. 怎么输出 HH:MM 的格式?试了一下像保留小数点一样使用 C 的标准输入输出(Xchkoo 口中所说的“那套老掉牙的 cstdio”)的占位符,居然啪一下就行了

      3. 怎么处理时分进位?60 进制,因为不知道进几次所以用 while 循环实现就行了

      4. s/v 有小数点怎么办?不能四舍五入,只能向上取整,因为迟到 0.0000000000010.000000000001 分钟也是迟到。

      5.千米迢迢上学的 yyy 问题:八个小时都到不了学校怎么办?当 hh 自减变为 1-1 的时候将 hh 赋值为 2323 即可,由于不可能提前超过一天出发(某学生连续赶路 3030 余小时猝死)所以 if 即可

      1. h 及 m 的计算问题:我的做法是赋初值 08:00 然后往回倒减分钟数,然后进位到小时位

      代码

      #include<bits/stdc++.h>
      using namespace std;
      int main() {
      	int s,v;
      	cin>>s>>v;
      	int t=ceil(1.0*s/v);
      	int h=8,m=-t-10;
      	while(m<=0) {
      		m+=60;
      		h--;
      		if(h<0) h=23;
      	}
      	printf("%.2d:%.2d",h,m);
      	return 0;
      }
      

      编辑记录

      2021-08-06 18:11:00

      • 1

      信息

      ID
      4629
      时间
      1000ms
      内存
      125MiB
      难度
      2
      标签
      (无)
      递交数
      37
      已通过
      20
      上传者