求大佬解答

P5707 【深基2.例12】上学迟到

xzc_yhxr @ 2023-08-30 07:52:08

#include<bits/stdc++.h>
using namespace std ;
int main(){
    int s , v  ; 
    scanf("%d %d" , &s , &v) ;
    int need_time = ceil(s / v) + 10 ;
    int have_time = 80 * 60 ;
    need_time > have_time ? have_time += 24 * 60 : have_time *= 1 ;
    have_time -= need_time ;
    int hour = floor(have_time / 60) ; 
    int minute = have_time - hour * 60 ;
    hour %= 24 ;
    hour < 10 ? printf("%c%d" , '0' , hour) : printf("%d" , hour) ;
    cout<<":";
    minute < 10 ? printf("%c%d" , '0' , minute) : printf("%d" , minute) ;
    return 0 ; 
}

这个代码minute-=1就90,不加就10。错的点互补,什么问题


by AuCloud @ 2023-08-30 08:07:08

取整问题吧


by Nancy_Cherry @ 2023-08-30 08:56:43

在给定的代码中,问题出现在以下这行代码:

int minute = have_time - hour * 60 ;

这行代码计算分钟数时,应该是从剩余时间中减去已经计算过的小时数的分钟数。但是在这个代码中,have_time已经减去了need_time,即已经减去了需要的时间。因此,这里应该是减去hour * 60的分钟数之后再减去1分钟,即:

int minute = have_time - (hour * 60 + 1);

这样就可以正确地计算剩余的分钟数了。


by Nancy_Cherry @ 2023-08-30 08:57:10

求关


by xzc_yhxr @ 2023-08-30 09:48:48

@Nancy_Cherry 下面写了,-=1就90wa , /dk


by Nancy_Cherry @ 2023-08-30 10:25:33

@xzc_yhxr az,尴尬了

我把我的代码给你看看

#include<bits/stdc++.h>
using namespace std;
int main() {
    int x,y,h = 7,m = 50;
    cin >> x >> y;
    m = m - ceil((x * 1.0 / y));
    while(m < 0) {
        h--;
        m += 60;
    }
    while(h < 0) h += 24;
    if(h < 10) cout << "0";
    cout << h << ":";
    if(m < 10) cout << "0";
    cout << m;
    return 0;
}

by Nancy_Cherry @ 2023-08-30 10:46:27

改好了,你看看

#include<bits/stdc++.h>
using namespace std;

int main() {
    int s, v;
    scanf("%d %d", &s, &v);
    int need_time = ceil(static_cast<double>(s) / v) + 10;
    int have_time = 80 * 60;
    if (need_time > have_time) {
        have_time += 24 * 60;
    }
    have_time -= need_time;
    int hour = have_time / 60;
    int minute = have_time % 60;
    hour %= 24;
    hour < 10 ? printf("%c%d", '0', hour) : printf("%d", hour);
    cout << ":";
    minute < 10 ? printf("%c%d", '0', minute) : printf("%d", minute);
    return 0;
}

对于表达式 s / v,s 和 v 都是整数类型,因此整数除法会导致结果被截断,得不到准确的商值。为了解决这个问题,我将 s 强制转换为 double 类型,使用浮点数除法来计算准确的商值。

然后最好不使用 printf 和 cout 两种不同的输出方式,可能导致输出结果混乱。

改都改了给个关注不过分吧


by xzc_yhxr @ 2023-08-30 21:13:21

@Nancy_Cherry 关了


|