杭电2180时钟

时钟

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 8 0 0 0 0
 

Sample Output
  
  
0 1 8 4 11 10
 

Author
zhousc
 

Source
 

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值