题目链接:http://acm.tju.edu.cn/toj/showp2095.html
题目大意:问从起点时刻第一次走到终点时刻的过程中分针和时针相遇了多少次
思路:时针每分钟走动0.5度分钟每分钟走动6度,t为从00:00到当前时刻走了多少分钟,那么分针就比时针多走了5.5t度,每多走360就说明分针与时针相遇了一次
然后计算终点时刻和起点时刻分别对00:00来说相遇了时针多少次,然后他们的差值就是这段区间内相遇了多少次,如果终点时刻小于起点时刻那么就是这个差值加上11,因为一个周期内最多相遇11次。
代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int a,b,c,d,s,e,ans,aa,cc;
cout<<"Initial time Final time Passes"<<endl;
while(cin>>a>>b>>c>>d)
{
aa=a;cc=c;
if(a==12)aa=0;
if(c==12)cc=0;
s=aa*60+b; //起点时刻
e=cc*60+d; //终点时刻
ans=((e*11)/720)-((s*11)/720); //5.5e/360 5.5s/360
if(s>e)ans+=11; //一个周期(12个小时)至多相遇11次
printf(" %02d:%02d %02d:%02d %2d\n",a,b,c,d,ans); //这里用printf格式好控制 因为3:20 要显示为03:20
}
return 0;
}