题目直接放代码注释了
/*美团点评笔试题:时间回溯
有一个很经典的问题是,当前时间是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;
}
跪求更好的解答 ):
网友评论