zoukankan      html  css  js  c++  java
  • UVA10339 【Watching Watches】

    题目大意:有两个时钟,一个每天慢(a)秒,另一个每天慢(b)秒,询问两个时钟下一次重合的时刻(.)

    时刻重合也就是整整相差一周的时候,一周为(12)个小时,总共(12* 60 * 60)秒,用这个数除以(abs(a-b))即为走多少天后两个时钟重合。接下来用需要走的天数$ * $ 某一个表每天走的时间即为答案。

    几个要注意的点:

    • 最后的答案要注意化为时间格式。

    • 每一个钟表走的时间要减去少走的时间。

    • (0)时要注意化为(12)时。

    • 为避免精度误差,需要走的天数我们用(double)类型来存。

    code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define D double
    #define abs(a) ((a) < 0 ? -(a) : (a)) // 用三目运算符代替cmath库的函数
    
    const int circle = 12 * 60 * 60; // 时钟一周的秒数
    const int day = 24 * 60 * 60; // 时钟一天走的秒数
    int a, b;
    
    int main() {
        while (scanf("%d%d", &a, &b) == 2) {
            int ooo = abs(a - b); 
            if (ooo == 0) { // 特判两时钟一开始就重合的情况
                printf("%d %d 12:00
    ", a, b);
                return 0;
            }
            D ankh = circle * 1.0 / ooo; // 需要走的天数
            int minute = (int)(ankh * (day - a) / 60.0 + 0.5) % day; // 秒数转为分钟数,+ 0.5向上取整
            int hour = minute / 60;
            hour %= 12;
            if (hour == 0) hour = 12; // 0时即12时
            minute %= 60;
            printf("%d %d %02d:%02d
    ", a, b, hour, minute); // %02d 自动追加前导0补齐两个位宽
        }
        return 0;
    }
    
    

    完结撒花∩( ・ω・)∩

  • 相关阅读:
    TCP定时器 之 重传/延迟ACK/保活 定时器初始化
    指针03-指针和字符串
    指针02
    指针01
    switch语句分析
    结构体分析
    参数、返回值、局部变量、数组分析
    多维数组分析
    循环语句分析
    if语句分析
  • 原文地址:https://www.cnblogs.com/Hydrogen-Helium/p/11738039.html
Copyright © 2011-2022 走看看