CF916A Jamie and Alarm Snooze 题解

Content

令一个时间为幸运时间,当且仅当该时间中包含数字 \(7\)

小 J 很懒,他决定在 \(h\)\(m\) 分起床,于是他将闹钟设定在一个很幸运的时间,并通过按一次按钮以多睡 \(x\) 分钟一直睡到 \(h\)\(m\) 分,现在他想知道最少需要按多少次按钮。

数据范围:\(0\leqslant h\leqslant 23,0\leqslant m\leqslant 59\)

Solution

题目中问的其实就是距离 \(h\)\(m\) 分最近的幸运时间。正着推比较难想,我们不妨从 \(h\)\(m\) 分开始倒着推,每次倒退回去 \(x\) 分钟,出现的第一个幸运时间就是我们所需要的答案。

Code

int x, h, m, ans;

int check(int x, int y) {
	int p = x, q = y;
	while(p) {
		if(p % 10 == 7)	return 1;
		p /= 10;
	}
	while(q) {
		if(q % 10 == 7)	return 1;
		q /= 10;
	}
	return 0;
}

int main() {
	getint(x), getint(h), getint(m);
	while(1) {
		if(check(h, m))	return writeint(ans), 0;
		m -= x;
		ans++;
		if(m < 0)	h--, m += 60;
		if(h < 0)	h += 24;
	}
	return 0;
}
posted @ 2021-12-21 20:00  Eason_AC  阅读(40)  评论(0)    收藏  举报