Bootstrap

好好好,printf 你跟我这样玩是吧

起因:

一看,好像有点复杂,边界条件有点多

第一次试着提交了一下

#include <iostream>
using namespace std;

int main()
{
    int distance, velocity;
    cin >> distance >> velocity;

    double time = distance * 1.0 / velocity;
    int time1 = time;
    if (time - time1 != 0)
        time1 += 11;
    else
        time1 += 10;

    int total_time = time1 / 60;
    time1 %= 60;

    printf("0%d:%d", 7-total_time, 60-time1);


    return 0;
}

 不出意外,果然有问题

想了下,边界条件应该就是如果速度太慢,可能会导致前一天出发,也就是说别人在睡觉的时候,你已经出发去上学了....................

然后修改了一下

#include <iostream>
using namespace std;

int main()
{
    int distance, velocity;
    cin >> distance >> velocity;

    double time = distance * 1.0 / velocity;
    int time1 = time;
    if (time - time1 != 0)
        time1 += 11;
    else
        time1 += 10;

    int total_time = time1 / 60;
    time1 %= 60;

    if (7 - total_time < 0)
        total_time = 7 - total_time + 24;
    else
        total_time = 7 - total_time;

    printf("%02d:%d", total_time, 60 - time1);


    return 0;
}

依然还有两个测试点没有过

于是我就开始疯狂的找边界条件.....................................

找了半天没找到,正当我万念俱灰准备打开题解的时候,想了想,要不再读一遍题目吧,于是我再次读了一遍题目,瞄了一眼代码

再看了看我的代码

enmmmmmm,是不是分钟前的格式不对呢?我试着改了改

#include <iostream>
using namespace std;

int main()
{
    int distance, velocity;
    cin >> distance >> velocity;

  
    double time = distance * 1.0 / velocity;
    int time1 = time;
    if (time - time1 != 0)
        time1 += 11;
    else
        time1 += 10;

    int total_time = time1 / 60;
    time1 %= 60;

    if (7 - total_time < 0)
        total_time = 7 - total_time + 24;
    else
        total_time = 7 - total_time;

    printf("%02d:%02d", total_time, 60 - time1);
   


    return 0;
}

好家伙!还真是格式的问题

 看来以后输出有问题首先应该注意一下格式是不是有问题,不然忙活半天还是在原地踏步

附上一个带注释的版本

#include <iostream>                 // 引入输入输出流头文件
using namespace std;                // 使用标准命名空间

int main()
{
    int distance, velocity;         // 定义变量 distance 和 velocity,分别表示距离和速度
    cin >> distance >> velocity;    // 从输入流中读取距离和速度的值

    double time = distance * 1.0 / velocity; // 计算时间,距离除以速度
    int time1 = time;               // 将时间赋值给整型变量 time1
    if (time - time1 != 0)          // 如果 time 和 time1 不相等
        time1 += 11;                // 否则 time1 加 11(早点出发)
    else
        time1 += 10;                // 否则 time1 加 10

    int total_time = time1 / 60;    // 计算总时间,取整型商
    time1 %= 60;                    // 取模得到 time1 的小时数

    if (7 - total_time < 0)         // 如果 total_time 大于 7
        total_time = 7 - total_time + 24; // 计算 total_time 的小时数
    else
        total_time = 7 - total_time;      // 否则计算 total_time 的小时数

    printf("%02d:%02d", total_time, 60 - time1);    // 输出结果,注意格式要求

    return 0;                                       // 函数返回 0
}

总结:

1.输出不对,先看格式

2.如果要格式化输出时间的话,应该使用

printf("%02d:%02d", hour, minute);

这样的格式来输出,当使用 %02d 格式化输出一个整数时,%表示这是一个格式控制字符, 2 表示输出的整数应该占据 2 个字符的位置,不足的地方要用空格填充,d 表示输出一个整数值,02d 表示你希望输出一个两位数的整数,输出不足两位时前面补 0

同理,如果希望任意位数的数字时能够输出不足指定位数就补0,可以这样输出

printf("%0nd:%0nd", number1, number2);

n代表你想输出的位数 

例如输出一个三位数,不足则补零

如果您发现我文章中的错误,请您及时联系我,我看到后会及时改正,谢谢您!

感谢您的阅读!

;