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

1.题目介绍

2.题解

这里只有两个稍微注意的点

2.1 s % v != 0(向上取整)

这里的话,若是结果不为整数,我们必须向上取整,必须保证空余时间永远大于所需时间!

2.2 ceil向上取整函数的使用

当使用 ceil(s / v) 时,应该确保至少有一个操作数是浮点数,否则整数除法会导致结果被截断为整数。因此,你可以将其中一个操作数转换为浮点数,以确保得到正确的结果,也就是ceil((double)s / v) 。
如果运算中有常量的话处理就比较简单ceil(s/3.0),在后面加一个.0就可以了!

2.3 不足两位补零

这里我使用了setfill表示补零,setw限制必须为2位(如果是C中的printf函数就十分加简单了,直接printf("%02d:%02d",hour,min);)

std::cout << std::setfill('0') << std::setw(2) << hour << ":" << std::setw(2) << min << std::endl;
//
// Created by trmbh on 2023-10-20.
//
#include <iostream>
#include <iomanip>
#include <cmath>
int main(){
    int s, v;
    std::cin >> s >> v;
    int spend;
    spend = ceil((double)s / v) + 10; //向上取整
    int hour , min;
    if (spend < 8 * 60) {
        spend = 8*60 - spend;
    }
    else if (spend == 8 * 60) {std::cout << '00:00'; return 0;}
    else {
        spend = (24+8)*60 - spend;
    }
    hour = spend / 60;
    min = spend % 60;
    std::cout << std::setfill('0') << std::setw(2) << hour << ":" << std::setw(2) << min << std::endl;
    //这里使用printf("%02d:%02d",hour,min);也可以的
}
posted @ 2023-10-20 17:17  DawnTraveler  阅读(20)  评论(0编辑  收藏  举报