试题 B: 钟表
【问题描述】
在 12 小时制的钟表中,有分针、时针、秒针来表示时间。记分针和时针之间的夹角度数为 A(0 ≤ A ≤ 180)、分针和秒针之间的夹角度数为 B (0 ≤ B ≤ 180)。而恰好在 s 时 f 分 m 秒时,满足条件 A = 2B 且 0 ≤ s ≤ 6; 0 ≤ f < 60;0 ≤ m < 60,请问 s, f, m 分别是多少。
注意时针、分针、秒针都围绕中心匀速转动。
提交格式为三个由一个空格隔开的整数,分别表示 s, f, m。如 3 11 58表示3 点 11 分 58 秒。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为三个由一个空格隔开的整数,在提交答案时只填写为三个由一个空格隔开的整数,填写多余的内容将无法得分。
#include<bits/stdc++.h>
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++){
if(s==0&&f==0&&m==0){
continue;
}
double dm=360/60*m;
double df=360/60*f+dm/60;
double ds=360/12*s+df/12;
double a=abs(df-ds),b=abs(df-dm);
a=min(a,360-a),b=min(b,360-b);
if(fabs(a-2*b)<=0){
printf("%d %d %d",s,f,m);
}
}
}
}
}
时针夹角度数:分钟每走一圈,时钟走一格,即为1/12圈。那么我们可以得知,一格为30度。时钟并非直接跳到下一格,而是随着分针的转动带动到下一格,比如分钟从12指向6,走了半圈,届时时钟将会朝向下一时间点旋转半格。我们就得出来了,分钟转动的角度与一圈的比值和时钟从一格内转动的角度与一格的度数成正比。
就可以得出公式:分针转角/一圈=ds=df/12时针转角/一格 (df/360=ds/30)
即 ds=df/12 (注:这部分是分针转动带动时针转动的度数)