#include <bits/stdc++.h>
using namespace std;
const int N=45000;
int t,cnt;
double a,b,c;
//a是时针与分针的夹角,b是时针与秒针的夹角,c是分针与秒针的夹角
int h[N],m[N],s[N];
int main(){
cin>>t;
while(t--){
double k1,j1,k2,j2,k3,j3;char ch;
//k/j表示两根针之间的角度
cin>>k1>>ch>>j1>>k2>>ch>>j2>>k3>>ch>>j3;
k1/=j1,k2/=j2,k3/=j3;//计算角度
a=k1/6,b=k2/6,c=k3/6;//计算格子数(小格)
//枚举所有情况
cnt=0;//计数器归零
for(int i=0;i<12;i++)
for(int j=0;j<60;j++)
for(int k=0;k<60;k++){
double aa=i*5,bb=j,cc=k;
//计算时针、分针、秒针分别在哪一格
aa+=(double)j/60,bb+=(double)k/60;//计算偏移
if(aa>30) aa=60-aa;
if(bb>30) bb=60-bb;
if(fabs(aa-bb-a)<1e-5&&fabs(aa-cc-b)<1e-5&&fabs(bb-cc-c)<1e-5)
h[++cnt]=i,m[cnt]=j,s[cnt]=k;//记录满足条件的答案
}
cout<<cnt<<endl;
for(int i=1;i<=cnt;i++)
printf("%d:%d:%d\n",h[i],m[i],s[i]);
}
return 0;
}
这是个枚举题, 尽量还是自己debug吧.
1 个赞
计算每个指针的位置(以1/120度为单位):
- 时针位置:
h_pos = hh*3600 + mm*60 + ss
(因为每小时转30度,每分钟转0.5度,每秒转1/120度) - 分针位置:
m_pos = mm*720 + ss*12
(因为每分钟转6度,每秒转0.1度) - 秒针位置:
s_pos = ss*720
(因为每秒转6度)
再计算两两之间的角度差(不大于180度)
1 个赞
关贴