K13021 - 小科坐地铁
题目描述
小科每天上学都是坐地铁的,所以他妈妈给他办了一张地铁卡,每次乘坐地铁出入闸机时刷卡就行。最近一段时间,小科想知道从家到学校要多长时间,所以从地铁公司调出了n次乘车的记录信息进行核算,手动核算太麻烦,所以他想编写一个程序进行核算。
一次乘车记录包含两条信息,第一条信息是入闸机时闸机上显示的信息,表示入闸机开始乘车时间,第二条信息是出闸机时闸机上显示的时间,表示结束乘车时间
例如,一条乘车记录如下
09:58 10:48
前一条是入闸机时的信息,表示在入口闸机上刷卡时间是9点58分
后一条是出闸机时的信息,表示在出口闸机上刷卡时间是10点48分
那么可以知道这次乘车花费时间是50分钟
现在给出小科n次乘车的记录信息,请你计算出n次乘车花费的时间
输入格式
第一行,n次乘车记录 (1 ≤ n ≤ 100)
接下来n行,表示有n组入站闸机和出站闸机的乘车时间记录
输出格式
输出n行,每次乘车花费的时间
格式为:xxHyyM其中xx和yy分别是小时和分钟,并且都是两位数,不够两位时用0补齐
输入输出样例
输入样例1:
1
09:58 10:48
输出样例1:
00H50M
输入样例2:
2
09:34 10:52
06:35 07:45
输出样例2:
01H18M
01H10M
说明
(1)对于100%的数据,1 ≤ n ≤ 100,
(2)对于每次乘车记录,出闸机时间一定大于入闸机时间
这一题本人写的有亿点点复杂,还请见谅
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,s1,s2,k1,q,w;
cin>>n;
char a[1100];
while(n--){
for(int i=1;i<3;i++) cin>>a[i];
if(a[1]!='0'){
s1=a[1]-'0';
k1=a[2]-'0';
s1=s1*10+k1;
}
else s1=a[2]-'0';
cin.get();
for(int i=1;i<3;i++) cin>>a[i];
if(a[1]!='0'){
s2=a[1]-'0';
k1=a[2]-'0';
s2=s2*10+k1;
}
else s2=a[2]-'0';
q=s1;
w=s2;
cin.get();
for(int i=1;i<3;i++) cin>>a[i];
if(a[1]!='0'){
s1=a[1]-'0';
k1=a[2]-'0';
s1=s1*10+k1;
}
else s1=a[2]-'0';
cin.get();
for(int i=1;i<3;i++) cin>>a[i];
if(a[1]!='0'){
s2=a[1]-'0';
k1=a[2]-'0';
s2=s2*10+k1;
}
else s2=a[2]-'0';
s1-=q;
s2-=w;
if(s2<0){s1--;s2+=60;}
if(s1==0) cout<<"00H";
else if(s1<10) printf("0%dH",s1);
else cout<<s1<<"H";
if(s2==0) cout<<"00M";
else if(s2<10) printf("0%dM",s2);
else cout<<s2<<"M";
printf("\n");
}
return 0;
}