您的位置:首页 > 其它

ZJU2680 - Clock 任意时刻时钟夹角

2008-04-18 14:27 357 查看
题目大意:

给出5个时间hh:mm,按照时针与分针的夹角排序,输出排在中间(第三) 的时间。(0<=hh<=23,0<=mm<=59)

分析:

问题就是求任意时刻的时钟夹角。很简单,很快写完代码提交,WA……

郁闷了好久,最后在衡阳八中论坛上花了10块钱金币看了别人代码才发现自己犯了低级错误……

如果分针不在0位置的话,时针是不在整点位置的。

--------------------------------------------------------------------------------------------

/*
ZJU2680 Clock
*/

#include <stdio.h>
#include <stdlib.h>
#define N 5
#define PE 0.000001

typedef struct{
int h,m;
}Time;

Time a
;

inline double ABS(double x){
return x>0?x:-x;
}

double toAngle(Time t){
double ch = ((t.h<12?t.h:t.h-12)/12.)*360. + (t.m/60.)*30.;
double cm = (t.m/60.)*360.;

double angle = ABS(ch-cm);
if(angle>180.) return 360-angle;
else return angle;
}

int cmp2(Time a,Time b){
if(a.h==b.h) return a.m-b.m;
else return a.h-b.h;
}

int cmp(const void *A,const void *B){
double angA = toAngle(*(Time*)A);
double angB = toAngle(*(Time*)B);

if(angA<angB-PE) return -1;
if(angA>angB+PE) return 1;

return cmp2(*(Time*)A,*(Time*)B);
}

int main()
{
int i,j,k,m,n,T;

scanf("%d",&T);
while(T--){
//input
for(i=0;i<N;i++)
scanf("%d:%d",&a[i].h,&a[i].m);
//sort
qsort(a,N,sizeof(Time),cmp);

//output
printf("%02d:%02d/n",a[2].h,a[2].m);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: