P6484 题解
分析
这道题题意十分简单,就是求什么时候这两个数相等。毕竟只算一周的时间,所以最多就只有
就从发现的时候开始模拟,哪个时间小,就寻找下一次出现的时间,知道两个数相等即可。
Code
#include<bits/stdc++.h>
using namespace std;
int fh1,fm1,fh2,fm2,jh1,jm1,jh2,jm2;
string s[10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};//每个星期的英文
int main(){
//freopen("star.in","r",stdin);
//freopen("star.out","w",stdout);
scanf("%d:%d",&fh1,&fm1);
scanf("%d:%d",&fh2,&fm2);
scanf("%d:%d",&jh1,&jm1);
scanf("%d:%d",&jh2,&jm2);//输入
int t1,t2,j1,j2;
t1=fh1*60+fm1;//计算第一颗星星出现的时间
t2=fh2*60+fm2;//计算第二颗星星出现的时间
j1=jh1*60+jm1;//计算第一颗星星出现的间隔
j2=jh2*60+jm2; //计算第一颗星星出现的间隔
bool flag=0;
for(int i=1;i<=10080;i++){//只用模拟这么多遍,毕竟只有那么多情况。
if(t1==t2){//如果两个数相等,就退出
flag=1;//标记,看有没有重合过
break;
}
else if(t1<t2) t1+=j1;
else t2+=j2;//算下一次闪烁的时间
}
if(!flag){
cout<<"Never";
return 0;
}
cout<<s[t1/1440%7]<<endl;//输出星期
if(t1%1440/60<10)//要判断要不要零
cout<<0;
cout<<t1%1440/60<<":";
if(t1%60<10)
cout<<0;//同上
cout<<t1%60;
return 0;
}