hdu 1209

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1209

题意:给5个时间(小时:分钟),将之排序。排序规则是按指针锁夹锐角小到大,若夹角相等则按时间早到晚。最后输出中间的那个时间。

mark:题目很简单,角度也很好算:时针每小时走30度,每分钟走0.5度。分针每分钟走6度。做差后取绝对值,再和180比一下,如果大于180,用360减。

为了避免浮点数排序的麻烦,可乘以2倍后排序。3WA。。。排序的时候if语句后面手贱多写了一个;查了半天才查出来。。。

 1 # include <stdio.h>
 2 # include <stdlib.h>
 3 
 4 
 5 typedef struct TIME{
 6     int hh, mm ;
 7     int ang ;
 8 } TIME ;
 9 
10 
11 
12 int cmp(const void *a, const void *b)
13 {
14     TIME *p = (TIME*)a, *q = (TIME*)b ;
15     if (p->ang != q->ang)
16     return p->ang - q->ang ;
17     
18     if (p->hh != q->hh) return p->hh - q->hh ;
19     return p->mm - q->mm ;
20 }
21 
22 
23 int abs(int x){return x<0?-x:x;}
24 
25 
26 int main ()
27 {
28     int i, T ;
29     TIME time[5] ;
30     scanf ("%d", &T) ;
31     while (T--)
32     {
33         for(i = 0 ; i < 5 ; i++)
34         {
35             scanf ("%d:%d", &time[i].hh, &time[i].mm) ;
36             time[i].ang = abs((time[i].hh%12)*60+time[i].mm - time[i].mm*12) ;
37             if (time[i].ang > 360) time[i].ang = 720 - time[i].ang ;
38         }
39         qsort(time, 5, sizeof(time[0]), cmp) ;
40         printf ("%02d:%02d\n", time[2].hh, time[2].mm) ;
41     }
42     return 0 ;
43 }
原文地址:https://www.cnblogs.com/lzsz1212/p/2543773.html