PTA
基础编程题目
7-2 然后是几点 (15 分)
有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。
输入格式:
输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。
输出格式:
输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
代码示例
本人小白,个人想法
#include<stdio.h>
int main()
{
int a,b,Hour,Min,hour,min,c,d;
scanf("%d%d",&a,&b);
Hour=a/100;
Min=a%100;
hour=b/60;
min=b%60;
if((Min+min)>=60)
{
d=(Min+min)%60;
c=Hour+hour+1;
printf("%d",c*100+d);
}
else if((Min+min)>=0)
{
d=Min+min;
c=Hour+hour;
printf("%d",c*100+d);
}
else
{
d=Min+min+60;
c=Hour+hour-1;
printf("%d",c*100+d);
}
}
首先在这个代码中a和b分别代表了题目中的起始时间和流逝分钟
大体思路 是上是对起始时间通过对100,取余和取整得出
Hour(代入样例得出起始时间的整点数:11)
Min(代入样例得出起始时间的余下的分钟数:20)
那么对流逝时间b进行相同操作,得出
hour(代入样例得出流逝时间有多少小时:1)
min(代入样例得出流逝时间的余下的多少分钟:50)
然后通过c=Hour+Min,d=Min+min
分为小时部分和分钟部分,再根据接下来的进退位进行计算
但是
本题目有许多情况存在,并且流逝时间存在负数可能,所以要根据
分钟部分满60,要对小时进位
分钟部分为负数时的调整
所以以上代码的大致思路是
先根据分钟部分进行分类
- 分钟部分超过60需要向小时部分进位
- 分钟部分不足60无需向小时部分进位
- 分钟部分为负数需要向小时部分退位
以下进行分析。
if((Min+min)>=60)
{
d=(Min+min)%60;
c=Hour+hour+1;
printf("%d",c*100+d);
}
将(Min+min)部分对60取余得出最终正确显示的分钟部分;
至于c=Hour+hour+1其中的1是进位产生的,并且Min+min在此部分最多进1位,因为Min的取值范围为【0,60)min的取值范围都为(-60,60)。
其余的流逝时间的进位是在hour对60取整体现的。
if((Min+min)>=60)
else if((Min+min)>=0)
{
d=Min+min;
c=Hour+hour;
printf("%d",c*100+d);
}
这部分是最简单的情况 ,没有进/退位,直接将小时部分和分钟部分进行结合即可。
else
{
d=Min+min+60;
c=Hour+hour-1;
printf("%d",c*100+d);
}
当(Min+min)为负数时,则需加上60,
再将c=Hour+hour-1退去一位即可,而1的原因和上出相同。