美团点评—时间回溯

作者: 零岁的我 | 来源:发表于2020-04-12 13:58 被阅读0次

题目直接放代码注释了

/*美团点评笔试题:时间回溯
有一个很经典的问题是,当前时间是aa:bb,请问若干分钟后是什么时间?我们今天的问题是一个相反的问题,
已知现在的时刻是星期x的yy:zz时刻,请问n分钟前是周几,时间是多少?
例如现在是周三,02:10,则200分钟之前,应该是周二,22:50.

输入:
第一行一个正整数x,表示今天是周x(1<=x<=7)
第二行是一个24小时制的时间表示,时和分均含前导0,例如1时1分表示为01:01,保证时间格式是合法的,
第三行是一个正整数n,表示要求的是n分钟之前的时间。(1<=n<=10^9)
输出:
输出同样包含两行,第一行仅包含一个正整数,表示n分钟之前是周几。一个24小时制时间表示,时和分均
含前导0,例如1时1分表示为01:01,表示n分钟之前的时刻。
*/
#include<iostream>
#include<string>
using namespace std;

int main(int argc,char **argv)
{
    int x; //现在时间是周x
    cin>>x;
    if(x<1 || x>7) return 0;
    string curtime;
    cin>>curtime;
    int n;
    cin>>n; //求n分钟之前的时间
    int day=x; //表示n分钟之前是周几
    string pretime; //n分钟之前的时刻pretime="prehour:preminute"

    int prehour;
    int preminute;

    int countday=n/1440; //一天有1440分钟
    int counthour=(n-countday*1440)/60;
    int countminute=n-countday*1440-counthour*60;

    cout<<countday<<" "<<counthour<<" "<<countminute<<endl;
    if(countday){
        day=x-countday%7;
        if(day<1) day+=7;
    }

    int curhour=stoi(curtime.substr(0,2));
    int curminute=stoi(curtime.substr(3,2));

    if(curminute>=countminute){
        preminute=curminute-countminute;
    }
    else{
        preminute=curminute+60-countminute;
        curhour -=1;
        if(curhour<0){
            curhour+=24;
            day-=1;
            if(day<1) day+=7;
        }
    }
    if(curhour>=counthour){
        prehour=curhour-counthour;
    }
    else{
        prehour=curhour+24-counthour;
        day-=1;
        if(day<1) day+=7;
    }

    cout<<day<<endl;
    //cout<<prehour<<" "<<preminute<<endl;
    string sprehour=to_string(prehour);
    sprehour=sprehour.length()>1? sprehour:'0'+sprehour;
    string spreminute=to_string(preminute);
    spreminute=spreminute.length()>1? spreminute:'0'+spreminute;
    pretime=sprehour+':'+spreminute;
    cout<<pretime<<endl;
    
    return 0;
}

跪求更好的解答 ):

相关文章

网友评论

    本文标题:美团点评—时间回溯

    本文链接:https://www.haomeiwen.com/subject/ucwvmhtx.html