迟到问题,知道其他解法,但是想探求为什么以下解法不行?

新手上路,请多包涵

题目描述
学校和 yyy 的家之间的距离为 s 米,而 yyy 以 v 米每分钟的速度匀速走向学校。

在上学的路上,yyy 还要额外花费 10 分钟的时间进行垃圾分类。

学校要求必须在上午 8:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。

由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。

输入格式
一行两个正整数 s,v,分别代表路程和速度。

输出格式
输出一个 24 小时制下的时间,代表 yyy 最晚的出发时间。

输出格式为 HH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 0。

输入输出样例
输入 #1复制

100 99
输出 #1复制

07:48
说明/提示
对于 100% 的数据,1≤s,v≤10
4次方

为什么以下代码无法满分啊???

include <iostream>

include <cstdio>

include <cmath>

using namespace std;
int main()
{

long long v,s;
scanf ("%lld %lld",&s,&v);
long long t;
t=470-(s+v-1)/v;
long long a,b;
a=t/60;
b=t%60;
if (a&&b>0)
{
printf ("%02lld:%02lld",a,b);
}
else if(t==0)
{
    printf ("%s","00:00");
}
else if(a>0&&b==0)
{
    printf ("%02lld:00",23+a);
}
else
{
    printf ("%02lld:%02lld",23+a,60+b);
}
return 0;

}
新手菜鸟编程尽力了

得到解答

阅读 223
1 个回答
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main() {
    long long s, v;
    scanf("%lld %lld", &s, &v);
    
    // 计算总共需要的时间(分钟):行走时间 + 垃圾分类时间
    long long walkTime = (s + v - 1) / v; // 向上取整
    long long totalTime = walkTime + 10;
    
    // 8:00 对应的分钟数是 8*60 = 480
    // 从 480 减去总时间得到出发时间(分钟表示)
    long long departureTimeInMinutes = 480 - totalTime;
    
    // 如果是负数,需要从前一天开始算
    if (departureTimeInMinutes < 0) {
        departureTimeInMinutes += 24 * 60; // 加上一天的分钟数
    }
    
    // 转换为小时和分钟
    int hour = departureTimeInMinutes / 60;
    int minute = departureTimeInMinutes % 60;
    
    // 按格式输出
    printf("%02d:%02d", hour, minute);
    
    return 0;
}

原始代码的主要问题:

  1. 使用 470 作为基准时间是不正确的(应该是 480,表示 8:00)
  2. 没有考虑垃圾分类的 10 分钟
  3. 处理跨天的逻辑不正确

修正后的代码处理了这些问题,并简化了逻辑,使其更易理解和维护。当总时间大于 480 分钟(即需要前一天出发)时,我们只需简单地加上 24 小时(1440 分钟)即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题