转自 :http://res.tongyi.com/resources/old_article/student/846.html
一、知识预备
(1)普通钟表相当于圆,其时针或分针走一圈均相当于走过360°角;
(2)钟表上的每一个大格(时针的一小时或分针的5分钟)对应的角度是:;
(3)时针每走过1分钟对应的角度应为:;
(4)分针每走过1分钟对应的角度应为:。
二.计算举例
例1. 如图1所示,当时间为7:55时,计算时针与分针夹角的度数(不考虑大于180°的角)。
解析:依据常识,我们应该以时针、分针均在12点时为起始点进行计算。由于分针在时针前面,我们可以先算出分针走过的角度,再减去时针走过的角度,即可求出时针与分针夹角的度数。
分针走过的角度为:55×6°=330°
时针走过的角度为:
则时针与分针夹角的度数为:
三.用字母和公式表示:
当时间为m点n分时,其时针与分针夹角的度数为:
(1)分针在时针前面:
(2)分针在时针后面:
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct Time{
int hh;
int mm;
int time;
char str[5];
double angle;
}time[5];
int cmp(Time a,Time b){
if(a.angle==b.angle)
{
if(a.hh==b.hh)
return a.mm<b.mm;
else return a.hh<b.hh;
}
else return a.angle<b.angle;
}
double cnt(int h,int m)
{
if(h>=12) h=h-12;
double dh=h*30+m*0.5;
double dm=m*6;
double ma,mi;
ma=max(dh,dm);
mi=min(dh,dm);
double ans=ma-mi;
if(ans>=0&&ans<=180);
else
ans=360-ans;
return ans;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
for(int i=0;i<5;i++){
//23:00 11:00 23:00 12:00 12:00
scanf("%s",&time[i].str);
time[i].hh=(time[i].str[0]-'0')*10+time[i].str[1]-'0';
time[i].mm=(time[i].str[3]-'0')*10+time[i].str[4]-'0';
time[i].time=time[i].hh*60+time[i].mm;
// printf("%d %d\n",time[i].hh,time[i].mm);
time[i].angle=cnt(time[i].hh,time[i].mm);
}
sort(time,time+5,cmp);
printf("%s\n",time[2].str);
// for(int i=0;i<5;i++){
// printf("%s %lf\n",time[i].str,time[i].angle);
// }
}
return 0;
}