题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5276
题意:现给定一个扩大了12000倍的时针与分针转过的度数的差,问你符合要求的时间点。(秒针误差在10秒以内, 时间点从 00:00:00 - 11:59:59)
///
时针:
每小时转30°( 12/360 = 1/x)
每分钟转1/2°(12*60 / 360 = 1/x)
每秒针转1/120°(12*60*60 / 360 = 1/x)
分针:
每分钟转6°(60 / 360 = 1/x)
每秒针转1/10°(60*60 / 360 = 1/x)
h:m:s;
时针转的角度为:(h*3600 + m*60 + s)* 1/120 * 12000
分针转的角度为:(m*60 + s)* 1/10 * 12000
转一圈的角度为: Round = 360 * 12000
代码如下:
#include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <cmath> #include <stack> #include <cstring> using namespace std; #define INF 0xfffffff #define maxn 10000 int Round=360*12000; int main() { int n; while(scanf("%d", &n)!=EOF) { for(int i=0; i<12; i++) { for(int j=0; j<60; j++) { for(int k=0; k<60; k+=10) { int p = (i*3600+j*60+k)*100; int q = (j*60+k)*1200; int a=abs(p-q); ///若当时针与分针相差的角度大于180*12000,则让其等于较小的那个度数。 if(a>Round/2) a = Round - a; if(a==n) printf("%02d:%02d:%02d ", i, j, k); } } } } return 0; }