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