zoukankan      html  css  js  c++  java
  • G

    G - 娜娜梦游仙境系列——梦醒

    Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)     Special Judge

    Problem Description

    娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过头哟~”,娜娜问:“我怎样才能醒过来呢?”,天使说:“只要这个钟的时针和分针重合,你就可以进入时光隧道,离开这个地方。”

    那你能告诉娜娜还有多久时针和分针才会重合吗?

    Input

    多组数据,第一行是一个正整数t(t<=100,000),表示数据的组数

    对于每组数据,为一个时刻,格式为hh:mm:ss分别表示当时的时、分、秒(采用24小时计时法,范围从00:00:00~23:59:59)

    Output

    对于每组数据,输出一个浮点数,表示距离下一次时针和分针重合的秒数,误差在1e-4以内将会视为正确。

    Sample Input

    2
    23:59:59
    00:00:00

    Sample Output

    1.000000
    3927.272727

    Hint

    本题采用special judge
     

    题意:给一个时刻,问距离下一次时针和分针重合还需要多少秒。

    解法:一天以内时针和分针总共重合24次,可以把这24个时刻都计算出来,其实就是12/11的整数倍小时,换算成秒就是12*3600/11*k秒(k=1,2,...,24),然后对于每一个时刻,枚举搜索下一次重合的时刻是哪一个,相减即可。 这个是怎么计算出来的呢?我们肯定能确定00:00:00,时针和分针会重合,那么下一次重合是什么时候呢?时针转过一圈是12小时,在这12小时中,时针和分针正好重合了11次,所以相邻两次重合的间隔就是12/11小时。

    note:我是推公式出来,把每小时重合的秒钟数保存后计算。{(s/3600+h)*30=s/3600*360  -> s=3600/11*h }

     1 #include <stdio.h>
     2 #include <string.h>
     3  
     4 int main()
     5 {
     6     int t,i,j,k,h,m,s;
     7     double sec[20],n;
     8     char time[10];
     9     for(i=0;i<12;i++)   //保存12个小时的重合秒钟数
    10     {
    11         sec[i]=i*3600*1.0/11;
    12     }
    13     while(scanf("%d",&t)!=EOF)
    14     {
    15         while(t--)
    16         {
    17             scanf("%s",time);
    18             h=10*(time[0]-'0')+(time[1]-'0');
    19             m=10*(time[3]-'0')+(time[4]-'0');
    20             s=10*(time[6]-'0')+(time[7]-'0');
    21             s=m*60+s;
    22             if(h>=12)
    23                 h-=12;
    24             if(s>=sec[h])   //当前秒钟大于重合的秒钟值,则下一次重合秒钟等于当前时间距离下一小时的秒钟数+下一小时重合的秒钟数
    25             {
    26                 n=3600-s;   
    27                 if(h==11)
    28                     h=0;
    29                 else
    30                     h++;
    31                 n+=sec[h];
    32             }
    33             else
    34             {
    35                 n=sec[h]-s;
    36             }
    37             printf("%.6lf
    ",n);
    38         }
    39  
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    crash reporting system for Windows applications
    1
    qt 试用 (3)配置编译源代码及调试
    kd tree & ray tracing
    new
    KMP算法中关于next数组的探究
    teamviewer vs echovnc
    NAT之stun确定nat类型
    Wireshark
    GNU httptunnel,当SSH被block时的选择
  • 原文地址:https://www.cnblogs.com/weigx/p/4429788.html
Copyright © 2011-2022 走看看