1 #include <stdio.h> 2 3 //設置時分秒針的速度 4 //時針720秒走一格,分針60秒走一格,秒針1秒走一格,鍾表一圈共60格 5 //因此時針速度為1/720,分針速度為1/60,但在程序中為了便於實現,全部擴大720倍 6 //所以得出如下宏定義 7 int main() 8 { 9 int vh=1; //時針速度 10 int vm=12; //分針速度 11 int vs=720; //秒針速度 12 int circle=12*3600; 13 14 int n=0; 15 int t=0; 16 17 //循環一整天,共24*60*60秒 18 /*思路:三針相遇並不一定是在整秒時相遇,也有可能是在相鄰兩秒之間相遇,例如某次是在秒針從1 秒跳到2秒的過程中相遇。 19 但無論如何,在相遇的那一刻,秒針比分針多走的圈數比這次相遇前要多一圈, 20 例如某時刻秒針比分針多走了100圈,在下次相遇時,秒針就比分針多走了101圈。同理,分針與時針,秒針與時針都滿足這點。*/ 21 for(t=1;t<=24*60*60;t++){ 22 int Diff_m_h_ago=(vm-vh)*(t-1)/circle; 23 int Diff_m_h_now=(vm-vh)*t/circle; 24 if(Diff_m_h_now-Diff_m_h_ago==1) //相遇總會比相遇的前一秒多走了1圈 25 { 26 n++; 27 printf("第%d次相遇的時間為 %d:%d:%d\n",n,t/3600,t%3600/60,t%60); 28 } 29 } 30 printf("一天中,時針和分針相遇%d次。\n\n",n); 31 32 n=0; 33 for(t=1;t<=24*60*60;t++) 34 { 35 //相遇的前一秒總會比相遇后少走了1圈 36 int Diff_m_h_ago=(vm-vh)*(t-1)/circle; 37 int Diff_m_h_now=(vm-vh)*t/circle; 38 int Diff_s_m_ago=(vs-vm)*(t-1)/circle; 39 int Diff_s_m_now=(vs-vm)*t/circle; 40 if(Diff_s_m_now-Diff_s_m_ago==1 && Diff_m_h_now-Diff_m_h_ago==1) 41 { 42 n++; 43 printf("第%d次相遇的時間為 %d:%d:%d\n",n,t/3600,t%3600/60,t%60); 44 } 45 } 46 47 printf("一天中,時分秒針相遇%d次。",n); 48 49 getchar(); 50 return 0; 51 }
時針和分針相遇22次,時分秒針相遇2次。