Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 20859 Accepted Submission(s): 5470
php
#include<iostream> #include<cmath> #include<algorithm> #include<iomanip> using namespace std; bool cmp(double i,double j,double distance){ //三根指针之间角度与给定度数之间的对比 if((i-j>=distance)&&(360-i+j>=distance)) return true; else if((j-i>=distance)&&(360-j+i>=distance)) return true; else return false; } bool check(double m,int i,int j,double k){ double sec = k*6; //秒针一秒走了6度 double min = (double)j*6 + k/10; //分针在当前时间走了 6*j + 秒针进位的度数 double h = 30*(double)i + (double)j/2 + k/120; // 时针走的度数 取决于当前几点,几分,几秒 return (cmp(sec,min,m)&&cmp(sec,h,m)&&cmp(min,h,m)); } int main(){ double m; while(cin>>m&&m!=-1){ double cnt = 0.0; for(int i=0;i<12;i++){ for(int j=0;j<60;j++){ for(double k=0;k<60;k=k+0.02){ //对秒进行精度划分 if(check(m,i,j,k)) cnt++; } } } cout<<setiosflags(ios::fixed)<<setprecision(3)<<100.0*2*cnt/(12*60*6000)<<endl; } }
为了精度,设置了对秒针进行步数的细化,大概0.2秒进行一次判断能够达到精度,可是超时的,因而乎只能用计算的方法,而不是模拟的方法:ios
一、设置一个时针与分针的循环app
二、根据时针与分针以及给的夹角,时针与分针应保持角度下算出秒钟的范围this
三、根据时针以及给的夹角,时针与秒针保持角度下算出秒钟的范围spa
四、根据分针以及给的夹角,分针与秒针保持角度下算出秒钟的范围指针
五、三个范围取交集,累加求得答案。rest
代码以下:blog