HDU 5387 Clock

本文介绍了一种计算特定时间下时钟上时针、分针及秒针之间角度的方法,并通过编程实现这一计算过程。利用时间与角度之间的转换公式,将时间转换为度数,进而计算出三者间的精确夹角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析:给你一个时间,让你输出3个时分,时秒,分秒的夹角。如果时间是hh(0<=hh<12),mm,ss,那么度数分别是s=6*ss; m=6*mm+ss/10; h=30*hh+mm/2+ss/120; 然后给每个角度都乘以120,这样得出来的角度都是整数了,用k先记录着,这样夹角除以k就行了。

# include <stdio.h>
# define abs(x) x>0?x:-(x);
  int gcd(int a,int b)
  {
      return b?gcd(b,a%b):a;
  }
  int main()
  {
      int i,k,t,hh,mm,ss,h,m,s,ans[4],g[4];
      scanf("%d",&t);
      while(t--)
      {
          scanf("%d:%d:%d",&hh,&mm,&ss);
          if(hh>=12)
            hh-=12;
          k=120;
          h=3600*hh+60*mm+ss;
          m=720*mm+12*ss;
          s=720*ss;
          ans[1]=abs(h-m);ans[2]=abs(h-s);ans[3]=abs(m-s);
          for(i=1;i<=3;i++)
            if(ans[i]>180*k)
              ans[i]=360*k-ans[i];
          for(i=1;i<=3;i++)
          {
              g[i]=gcd(ans[i],k);
              if(k/g[i]==1)
                printf("%d ",ans[i]/g[i]);
              else
                printf("%d/%d ",ans[i]/g[i],k/g[i]);
          }
          putchar('\n');
      }
      return 0;
  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值