G - 娜娜梦游仙境系列——梦醒
G?-?娜娜夢游仙境系列——夢醒
Time Limit:?2000/1000MS (Java/Others)????Memory Limit:?128000/64000KB (Java/Others)???? Special JudgeProblem Description
娜娜離開了這個王國,走向遠方,在曠野上,娜娜看到了一個大時鐘,上面的時針分針秒針都在緩緩轉動,那只揮著翅膀的天使又出現了,天使說:“外面天已經亮了,娜娜你別睡過頭喲~”,娜娜問:“我怎樣才能醒過來呢?”,天使說:“只要這個鐘的時針和分針重合,你就可以進入時光隧道,離開這個地方?!?/p>
?
那你能告訴娜娜還有多久時針和分針才會重合嗎?
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:00Sample Output
1.000000 3927.272727Hint
本題采用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",n); 38 } 39 40 } 41 return 0; 42 }?
轉載于:https://www.cnblogs.com/weigx/p/4429788.html
總結
以上是生活随笔為你收集整理的G - 娜娜梦游仙境系列——梦醒的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Android定制Launcher
- 下一篇: 查找单链表中间节点