钟表的指针

题目来源:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1727

1727: 钟表的指针

Time Limit: 1 Sec Memory Limit: 64 MB

Description

钟表作为计时报时工具在我们的日常生活中必不可少。相信每个学习程序设计的人都想设计一款美观实用且具有个性特色的钟表软件。如果要设计出美观大方的图形化用户界面,对程序设计初学者来说有一定的难度(以后通过自己的努力一定能行哦!)。但是,我们可以抛开图形化用户界面的设计,而直接进入到关键逻辑部分的设计。绘制钟表的关键逻辑是根据当前时间,确定时针、分针、秒针的位置。 给定从某个指定日期的0时0分0秒以来消逝的秒数,以及时针、分针、秒针的长度(即指针末端与中心的距离),要你编程计算出此时时针、分针、秒针末端的坐标以及角度。 说明:(1)坐标的中心在圆心。(2)x轴的正向指向3点正,y轴的正向指向12点整。(3)时分秒指针的角度是指由正x轴向逆时针旋转指针到指针位置所经过的角度,以“度”作为单位。取值范围在[0,360)。

Input

第一行包含3个整数,分别表示时分秒指针的长度。第二行包含一个整数n(1≤n≤40000),表示测试用例的个数。以下n行,每行一个整数k(1≤k≤1000000),表示从0时0分0秒起经过的秒数。

Output

按照输出样例格式输出。测试样例之间有一个空行。对于每个测试用例,第一行输出起点经过的秒数。第二、三、四分别输出时、分、秒针末端的x坐标、y坐标、角度(保留3位小数)。

Sample Input

1000 2000 3000
7
0
10
20
30
40
50
60

Sample Output

after 0 seconds
hour:0 1000 90.000
minute:0 2000 90.000
second:0 3000 90.000

after 10 seconds
hour:1 999 89.917
minute:34 1999 89.000
second:2598 1499 30.000

after 20 seconds
hour:2 999 89.833
minute:69 1998 88.000
second:2598 -1500 330.000

after 30 seconds
hour:4 999 89.750
minute:104 1997 87.000
second:0 -3000 270.000

after 40 seconds
hour:5 999 89.667
minute:139 1995 86.000
second:-2598 -1499 210.000

after 50 seconds
hour:7 999 89.583
minute:174 1992 85.000
second:-2598 1500 150.000

after 60 seconds
hour:8 999 89.500
minute:209 1989 84.000
second:0 3000 90.000

解析:找出时分秒的关系,以及坐标的计算,只是不知道x,y的精度要求是多少,求赐教

代码:

#include<iostream> 
#include<iomanip> 
#include<cmath> 
using namespace std; 
const double pi = 4 * atan(1); 
int main() 
{ 
    int h, m, s; 
    cin >> h >> m >> s; 
    int t; 
    cin >> t; 
    while (t--) 
    { 
        int n; 
        cin >> n; 
        cout << "after " << n << " seconds" << endl; 
        float hh = pi / 2 - pi*n / 21600; 
        float hhh = hh * 180 / pi; 
        hhh = hhh - ((int)hhh / 360) * 360; 
        cout << "hour:" << (int)(cos(hh)*h) << " " << (int)(sin(hh)*h) << " " << fixed << setprecision(3) << (hhh > 0 ? hhh : (hhh + 360)) << endl; 
        float mm = pi / 2 - pi*n / 1800; 
        float mmm = mm * 180 / pi; 
        mmm = mmm - ((int)mmm / 360) * 360; 
        cout << "minute:" << (int)(cos(mm)*m) << " " << (int)(sin(mm)*m) << " " << fixed << setprecision(3) << (mmm > 0 ? mmm : (mmm + 360)) << endl; 
        float ss = pi / 2 - pi*n / 30; 
        float sss = ss * 180 / pi; 
        sss = sss - ((int)sss / 360) * 360; 
        cout << "second:" << (int)(cos(ss)*s) << " " << (int)(sin(ss)*s) << " " << fixed << setprecision(3) << (sss > 0 ? sss : (sss + 360)) << endl; 
        cout << endl; 
    } 
    return 0; 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值