P6484 题解

· · 题解

分析

这道题题意十分简单,就是求什么时候这两个数相等。毕竟只算一周的时间,所以最多就只有 7*24*60=10,080 种情况,暴力完全可以。

就从发现的时候开始模拟,哪个时间小,就寻找下一次出现的时间,知道两个数相等即可。

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;
}