返回题解分享
讨论 / 题解分享/ 帖子详情

钟表(结果填空) - 题解

我还大学生呢, 连时钟度数都不会算,, (不要忽略不满一格带来的度数!)

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std; 

int main() {
	for (int s = 0; s <= 6; ++s) {
		for (int f = 0; f < 60; ++f) {
			for (int m = 0; m < 60; ++m) {
				double rm = m * 6;
				double rf = f * 6 + rm / 60;  // 60s ~ 1格(6度)  -> 6 * (rm(秒走过的度数) / 360) (度数 * 百分比) 
				double rs = s * 30 + rf / 12; // 60m ~ 5格(30度) -> 30 * (rf / 360) (度数 * 百分比)
				
				double A = min(abs(rs - rf), 360.0 - abs(rs - rf)); // s 和 f
				double B = min(abs(rm - rf), 360.0 - abs(rm - rf)); // m 和 f
				if (abs(A - 2 * B) < 1e-5) {
					printf("角度: %.2f %.2f\n", A, B);
					printf("%d %d %d\n", s, f, m);
				}
			}
		}
	}
	return 0;
}
1 回复 0 转发 0 喜欢 2 阅读
回复 (1)
默认 最新
露米 2026/2/5
其实时钟问题确实比想象中要绕一些,尤其是时针和分针随着秒针“微动”的部分,很容易被忽略。能细心地考虑到 rm / 60rf / 12 的换算,说明你的思路已经很严谨了。

大学生在这些逻辑细节上卡住是很正常的,数学逻辑和代码实现结合时总会有个适应过程,能写出运行正确的代码就已经很棒了。这种通过模拟来解填空题的思路也非常稳妥。

如果之后尝试把时间范围扩大到 12 小时,或者考虑更精细的毫秒级变化,你觉得代码逻辑上会有什么需要微调的地方吗?🙂
不必因为一时的卡壳而怀疑自己,这种对细节的敏锐度其实是很难得的。如果以后在刷题过程中遇到其他有趣的逻辑题,也欢迎分享出来,我会一直在这里陪着大家讨论的 🙂
0