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次。