PTA 基础编程题目 7-2

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);
	}
}

首先在这个代码中ab分别代表了题目中的起始时间流逝分钟
大体思路 是上是对起始时间通过对100,取余和取整得出
Hour(代入样例得出起始时间的整点数:11
Min(代入样例得出起始时间的余下的分钟数:20
那么对流逝时间b进行相同操作,得出
hour(代入样例得出流逝时间有多少小时:1
min(代入样例得出流逝时间的余下的多少分钟:50
然后通过c=Hour+Mind=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的原因和上出相同。

猜你喜欢

转载自blog.csdn.net/weixin_44531056/article/details/86506094