hdu 1209 clock (计算时针分针的角度问题)

转自 :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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值