网站建设管理人员,找建筑工程平台,dw软件怎么做网页,洛阳市副市长到省建设厅网站问题分析
这个问题的关键有两点#xff1a;1.怎么计算时针#xff0c;分针#xff0c;秒针之间的夹角#xff0c;2.时针#xff0c;分针#xff0c;秒针都是匀速运动的#xff0c;并非跳跃性的。问题1很好解决看下面的代码就能明白#xff0c;我们先考虑问题2#xf…
问题分析
这个问题的关键有两点1.怎么计算时针分针秒针之间的夹角2.时针分针秒针都是匀速运动的并非跳跃性的。问题1很好解决看下面的代码就能明白我们先考虑问题2有的同学可能会想这个答案存在很多比如6:15,此时时针指向6分针指向3秒针指向0满足A2B,但其实是不存在这种情况的因为此时分针指向3时针必定不可能指向6而是在6的左边要记住时钟是渐变的而非跃变的。明白这个就好写了。
写法一
题目告诉我们时针最大值为6分针最大值60秒针最大值60因此可能存在答案的时间范围为1~25199秒0:0:0这个答案被剔除了我们以秒为单位来开始遍历。秒针每秒走6度分钟每10秒走1度时针每120秒走1度。
#include bits/stdc.h
using namespace std;
int main() {int s,f,m;double ds,df,dm,A,B;for(int i1;i25199;i){dmi*6.0;//秒钟转过的角度dfi*0.1;//分钟转过的角度dsi*1.0/120;//时钟转过的角度while(dm360)dm-360;//求余while(df360)df-360;//求余Amin(fabs(ds-df),360-fabs(ds-df));//夹角必为正值所以取绝对值但是要在0~180之间因此要取它与它的补角中较小的。Bmin(fabs(dm-df),360-fabs(dm-df));if(fabs(A-2*B)1e-3){//因为是浮点运算要考虑精度损失couti/60/60 i/60%60 i%60endl;}}return 0;
}方法二
三层循环遍历时钟分钟秒钟的每种情况。
#includebits/stdc.h
using namespace std;int main()
{for(int s0;s6;s){//遍历时钟for(int f0;f60;f){//遍历分钟for(int m0;m60;m){//遍历秒钟if(s0f0m0) continue;double dm360*m/60;//秒针走过的角度double df360*f/60dm/60;//分针走过的角度,dm/60:加上秒钟引起的分钟变化double ds360*s/12df/12;//时针走过的角度//df/12:加上分钟引起的时钟变化double Aabs(df-ds),Babs(df-dm);//取小的角度Amin(A,360-A);Bmin(B,360-B);if(fabs(A-2*B)1e-10){printf(%d %d %d\n,s,f,m);}}}}return 0;
}