#19265. 时空旅行者的怀表

时空旅行者的怀表

出一个习题,计算时钟上经过N小时候是几点,注意N可能为负。

太棒了,这正是巩固“负数取模”知识点的绝佳场景!

时钟其实就是最常见的循环数组,只不过它的长度 NN 固定为 24(如果是24小时制)。

这道题作为“循环数组”专题的签到题,既贴近生活,又能直接考察公式 ((a + b) % n + n) % n 的运用。


习题:时空旅行者的怀表

【题目描述】

小明是一名时空旅行者,他有一块显示 24小时制0230 \sim 23 点)的魔法怀表。 现在怀表上显示的时间是 HH 点(0H230 \le H \le 23)。 小明进行了一次时空跳跃,跳跃的跨度是 NN 小时。

  • 如果 N>0N > 0,表示向未来跳跃了 NN 小时。
  • 如果 N<0N < 0,表示向过去跳跃了 N|N| 小时(也就是时光倒流)。

请你计算跳跃结束后,怀表上显示的时刻是多少?

【输入格式】

输入一行,包含两个整数 HHNN

  • HH 表示当前时刻 (0H230 \le H \le 23)。
  • NN 表示跳跃的小时数 (109N109-10^9 \le N \le 10^9)。

【输出格式】

输出一个整数,表示跳跃结束后的时刻(范围在 0230 \sim 23 之间)。

【样例 1】

输入

23 2

输出

1

解释:23点过2小时是第二天的凌晨1点。

【样例 2】

输入

2 -5

输出

21

解释:凌晨2点时光倒流5小时。 2点 \to 1点 \to 0点 \to 23点 \to 22点 \to 21点

【样例 3】

输入

10 -26

输出

8

解释:时光倒流26小时。也就是倒流一天(24小时)零2小时。 10点倒退24小时还是10点,再倒退2小时是8点。


【教练的思路解析】

同学们,这道题千万不要用 if 判断或者 while 循环去加减! 因为题目中 NN 的范围高达 10910^9(十亿)。

  • 如果你用 while(h < 0) h += 24;,当时光倒流 10910^9 小时,你的程序会超时(TLE)。

我们要相信数学的力量! 把时钟看作一个长度为 24 的循环数组。 当前下标是 HH,移动步数是 NN。 直接套用我们的万能公式

Target=((H+N)%24+24)%24\text{Target} = ((H + N) \% 24 + 24) \% 24