zoukankan      html  css  js  c++  java
  • ZOJ 2680 Clock()数学

    主题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1680


    There is an analog clock with two hands: an hour hand and a minute hand. The two hands form an angle. The angle is measured as the smallest angle between the two hands. The angle between the two hands has a measure that is greater than or equal to 0 and less than or equal to 180 degrees.

    Given a sequence of five distinct times written in the format hh : mm , where hh are two digits representing full hours (00 <= hh <= 23) and mm are two digits representing minutes (00 <= mm <= 59) , you are to write a program that finds the median, that is, the third element of the sorted sequence of times in a nondecreasing order of their associated angles. Ties are broken in such a way that an earlier time precedes a later time.

    For example, suppose you are given a sequence (06:05, 07:10, 03:00, 21:00, 12:55) of times. Because the sorted sequence is (12:55, 03:00, 21:00, 06:05, 07:10), you are to report 21:00.

    Input

    The input consists of T test cases. The number of test cases (T) is given on the first line of the input file. Each test case is given on a single line, which contains a sequence of five distinct times, where times are given in the format hh : mm and are separated by a single space.

    Output

    Print exactly one line for each test case. The line is to contain the median in the format hh : mm of the times given. The following shows sample input and output for three test cases.

    Sample Input

    3
    00:00 01:00 02:00 03:00 04:00
    06:05 07:10 03:00 21:00 12:55
    11:05 12:05 13:05 14:05 15:05
    

    Sample Output

    02:00
    21:00
    14:05
    

    Source: Asia 2003, Seoul (South Korea)

    题意:

    //给出 5 个时刻,按时钟的时针,分针夹角从小到大排序,
    //输出中间的时刻。

    代码例如以下:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    struct TIME
    {
        int h;
        int m;
        int angle;
    }a[7];
    
    int cal(TIME TT)
    {
        if(TT.h > 12)
        {
            TT.h-=12;
        }
        int tt = abs((TT.h*60 + TT.m) - TT.m*12);
        //原式为:TT.h*30+(TT.m/60)*30-a.m*6;
        if(tt > 360)
            tt = 720 - tt;
        return tt;
    }
    bool cmp(TIME A, TIME B)
    {
        if(A.angle != B.angle)
        {
            return A.angle < B.angle;
        }
        else if(A.h != B.h)
        {
            return A.h < B.h;
        }
        else
            return A.m < B.m;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            for(int i = 0; i < 5; i++)
            {
                scanf("%d:%d",&a[i].h,&a[i].m);
                a[i].angle = cal(a[i]);
            }
            sort(a,a+5,cmp);
            printf("%02d:%02d
    ",a[2].h,a[2].m);
        }
        return 0;
    }
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    CDK上安装kube-dashboard
    JBoss入门
    CDK安装
    minishift安装
    Openshift中Configmap的使用
    每天5分钟玩转Docker
    Openshift初步学习问题集
    pyinstaller深入使用,打包指定模块,打包静态文件
    firefox 开启安全禁用端口
    使用VirtualBox把IMG文件转换为VDI文件
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4862860.html
Copyright © 2011-2022 走看看