Clock
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5705
解题思路:
给你一个时间,让你找出这个时间之后的一个时间使得时针与分针所成角度为题目所给定的。
我们假设一圈度数为360*120,则时针一小时走3600度。分针一分钟走720度。
设当前时间为h,m分 则时针的角度为h*3600+m*60.分针的角度为720*m;
因此m = (3600*h-120*angle)/660 或者 m = (3600*h+120*angle)/660,秒为%660/11。
剩下的我们枚举小时即可求解。
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int h,f,m;
int icase = 0;
while(~scanf("%d:%d:%d",&h,&f,&m)){
int ang;
scanf("%d",&ang);
ang *= 120;
int t1 = 3600*h+60*f+m;
int a1,a2,a3;
int inf = 1e9;
for(int i = 0; i < 12; ++i){
int hh = 3600*i-ang;
int mm = hh/660;
int ss = hh%660/11;
int t2 = i*3600+mm*60+ss;
int T = t2-t1;
if(T <= 0)
T += 60*60*12;
if(T < inf){
a1 = i;
a2 = mm;
a3 = ss;
inf = T;
}
hh = 3600*i+ang;
mm = hh/660;
ss = hh%660/11;
t2 = i*3600+mm*60+ss;
T = t2-t1;
if(T <= 0)
T += 60*60*12;
if(T < inf){
a1 = i;
a2 = mm;
a3 = ss;
inf = T;
}
}
printf("Case #%d: %02d:%02d:%02d\n",++icase,a1,a2,a3);
}
return 0;
}