JER的小站

HDOJ-2033 人见人爱A+B

2025/11/02
23
0

这道题目依旧是A+B的题目只不过从数的相加变为了时间的相加,这就意味这分和秒必须满足60进1的规则,我们可以用三个变量CH,CM,CS来存储答案,从秒开始计算,我们很自然的想到可以用if语句来判断AS+BS是否大于60,再根据判断结果来决定是否进位,并最终决定CSCM的值,简约的代码实现如下

if (AS+BS>=60)
{
    CS = (AS+BS)-60;//CS的具体值
    CH += 1;//CH的进位
}else{
    CS = AS+BS
}

对待CH的操作也一样,不过我们还有一条道路,我们可以利用C++的取余和整除来更简洁的实现,当AS+BS大于60时,对AS+BS取余的结果等价于AS+BS-60,对AS+BS整除的结果为1,当AS+BS小于60时,对AS+BS取余的结果等价于AS+BS,对AS+BS整除的结果为0,所以我们只需要让CS等于AS+BS取余,CH在加上一个AS+BS的整除,就可以不用写if语句,CH,CM的计算同理

#include <iostream>
using namespace std;

int main() {
	int n;
	int AH, AM, AS, BH, BM, BS;
	int CH, CM, CS;
	while (cin >> n)
	{
		for (int i = 0; i < n; i++) {
			cin >> AH >> AM >> AS >> BH >> BM >> BS;
			CS = (AS + BS)%60;
			CM = (AM + BM + ((AS + BS) / 60)) % 60;
			CH = (AH + BH + ((AM + BM + ((AS + BS) / 60)) / 60));
			cout << CH << " " << CM << " " << CS << endl;
		}

	}

}