ZOJ1122时钟模拟题

这是一道时钟的模拟题,显然本人太渣做不出来,于是看了题解,其实看不懂,

先写下来回头再看吧:

时钟指针追赶问题,把相对位移,相对速度想清楚,再用时间求出结束位移模一下圈
的格数即可。 

 分析:设在 h:m时刻,时针和分针重叠,则有:

        m / 60 = ( h +  m / 60 ) / 12;  [意义是指针和12点组成的角度占360的占比]

        因此得到两针重叠的分钟数: m = h * 60 / 11; (浮点数)

        最终相当于在一个圆环上有 11 个点,每当时针指向这11个点是,即为时针分针重叠的时刻。这 11 个时刻点是:
        12点0分,1点5.45分,2点10.90分,3点16.36分, 4点21.81分,。。。,10点54.55分,共11个点。在下图中用红色点给出11个钟面上时针分针的重合点。

        图片

        现在问题是给定两个时刻中间,会夹多少个点(图中红点)。题目条件限定时间间隔会小于 12 小时。
所以可以把十一个点直接存起来,判断。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int starthour,startminute,finalhour,finalminute;
int sminute,fminute;
int pass;
printf("Program 3 by team X\n");
printf("Initial time  Final time  Passes\n");

while(scanf("%d%d%d%d",&starthour,&startminute,&finalhour,&finalminute)!=EOF)
{
sminute=(starthour%12)*60+startminute;
fminute=(finalhour%12)*60+finalminute;
pass=(fminute*11)/720-(sminute*11)/720;
if(sminute>fminute) pass+=11;
printf("       %02d:%02d",starthour,startminute);
printf("       %02d:%02d%8d\n",finalhour,finalminute,pass);
}
printf("End of program 3 by team X\n");
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值