C++PTA题解(2)——然后是几点
题目信息
题名:然后是几点
题目:有时候人们用四位数字表示一个时间,比如 1106
表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530
;0 点 30 分表示为 030
。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530
;0 点 30 分表示为 030
。流逝的分钟数可能超过 60,也可能是负数。
输出格式:输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
分析题目
这道题与小鱼的游泳时间有些相似,都是求时间,但这道题的难度要比那道题多出一点。那道题是给出两个时间点,求中间时间。这道题是给出1个时间点和中间时间,求第二个时间点。而且那道题给出的两个时间点是四个不同的数字(变量),这道题是集成在1个数字里。
先说一下大致思路吧:
- 先声明两个变量
- 再声明四个变量
- 输入前两个变量
- 计算后两个变量
- 判断b是否大于0
- 计算后四个变量
- 输出后两个变量
这么说不是很详细,这里就说4和6吧(就他们两个难)
4的意思是通过/100和%100的形式获取小时数
6的意思是通过h1=h1+(m1+b)/60;
m1=(m1+b)%60;这个计算分钟大于0的情况下的时间
或者是通过int con=h1*60+m1+b;
h1=con/60;
m1=con%60;这个计算分钟小于0(负数)的情况下的时间
示例代码
有了上面的核心代码,这道题就差不多了
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
int h1,h2,m1,m2;
cin>>a>>b;
h1=a/100;
m1=a%100;
if(b>=0){
h1=h1+(m1+b)/60;
m1=(m1+b)%60;
}else{
int con=h1*60+m1+b;
h1=con/60;
m1=con%60;
}
printf("%d%02d",h1,m1);
return 0;
}