杭电2180时钟

来源:互联网 发布:域名ns记录查询 编辑:程序博客网 时间:2024/05/18 02:10

时钟

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1731    Accepted Submission(s): 437


Problem Description
从a点b分到s点t分时针和分针重合多少次? 
 

Input
有多组数据,每组1行4个数 a,b,s,t. 1<=a,s <=12, 0<=b,t<60. 0 0 0 0结束.
 

Output
参看Sample output 
 

Sample Input
12 50 1 2 3 8 3 20 2 45 11 0 11 0 3 20 1 2 12 50 3 20 3 80 0 0 0
 

Sample Output
01841110
 

Author
zhousc
 

Source
ECJTU 2008 Summer Contest
 

Recommend
lcy   |   We have carefully selected several similar problems for you:  2183 2177 2176 2179 2181 
 


就是这个题,能逼疯。

以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;}


0 0