求大佬帮助,这题怎么做!!!

image

#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;
} 

@stringdp100005 @余帅 @王峥睿 @王文烨 @章嗣昂 @LeuR @栗子酱 @我命由我不由天 @360病毒 @CZF2919

@椰子糕

@章弥炫

这是个枚举题, 尽量还是自己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 个赞

关贴