题目链接: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\n", i, j, k);
                }
            }
        }
    }
    return 0;
}
View Code

 

 

 

 

 

 

    

posted on 2016-07-16 10:37  不忧尘世不忧心  阅读(148)  评论(0编辑  收藏  举报