时钟
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1731 Accepted Submission(s): 437
12 50 1 2 3 8 3 20 2 45 11 0 11 0 3 20 1 2 12 50 3 20 3 8 0 0 0 0
0 1 8 4 11 10
就是这个题,能逼疯。
以12小时为例,问题为:从开00:00:00到闭12:00:00时间段内,时针分针秒针重合的次数有多少次?各是何时?
因为00:00:00和12:00:00都是此问题的解,考虑到周期的原因,故把两个端点只取一个做成求解区间.
先考虑时针和分针重合的情形:
假设某一时刻时针和00:00:00时针的顺时针方向夹角为x度,则此时分针和00:00:00时针的顺时针方向夹角为12x-n*360度(n为使12x-n*360大于0且小于等于360的最小自然数).
那么根据条件就有方程:x=12x-n*360 (n同上)
则此方程解为:x=
360/11,720/11,1080/11,1440/11,1800/11,2160/11,2520/11,2880/11,3240/11,3600/11,3960/11
即约x=
32.7,65.5,98.2,130.9,163.6,196.4,229.1,261.8,294.5,327.3,360
对应的时间t(秒):t=x/360*12*60*60,约为:
3927.3,7854.5,11781.8,15709.1,19636.4,23563.6,27490.9,31418.2,35345.5,39272.7,43200.0
即
1:5:27.3,2:10:54.5,3:16:21.8,4:21:49.1,5:27:16.4,6:32:43.6,7:38:10.9,8:43:38.2,9:49:5.5,10:54:32.7,12:0:0
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,s,t;
int res1, res2, res;
while(1)
{
scanf("%d%d%d%d", &a, &b, &s, &t);
if(a == 0 && b == 0 && s == 0 && t == 0)
break;
a = a%12;
s = s%12;
res1 = (a*60+b)*11;
res2 = (s*60+t)*11;
if(res2 < res1)
res2 += 720*11;
res = res2/720 - res1/720;
if(res1 == 0)
res++;
printf("%d\n", res);
}
return 0;
}