HDU--IMNU集训三:夹角有多大(数学能力+数据分析能力)

来源:互联网 发布:查看端口占用命令 编辑:程序博客网 时间:2024/05/16 06:24

Problem Description

时间过的好快,一个学期就这么的过去了,xhd在傻傻的看着表,出于对数据的渴望,突然他想知道这个表的时针和分针的夹角是多少。现在xhd知道的只有时间,请你帮他算出这个夹角。

注:夹角的范围[0,180],时针和分针的转动是连续而不是离散的。

Input

输入数据的第一行是一个数据T,表示有T组数据。
每组数据有三个整数h(0 <= h < 24),m(0 <= m < 60),s(0 <= s < 60)分别表示时、分、秒。

Output

对于每组输入数据,输出夹角的大小的整数部分。

Sample Input

2
8 3 17
5 13 30

Sample Output

138
75
 
#include<iostream>
#include<stdio.h>
//#include<cstring>
//#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int main (void)
{
    int t;
    cin>>t;
    while( t-- )
    {
          int h,m,s;
          double ans;
          cin>>h>>m>>s;
          ans=( fabs( (h%12)*30+0.5*m+(1.0*s)/120
                            -(m*6+0.1*s) ) );//fabs--cmath
          cout<<(ans>180? int(360-ans) : int(ans))<<endl;
    }
    return 0;
}
 
 数学能力:在换算分针以及秒针走一个格时针分别走多大角度时我想了好久,也许大脑混沌的不行,昨晚想了好久想到烦躁,后来睡一觉问题迎刃而解了,看来在ACM竞赛时做题做不出来时出去走走也是蛮有必要的(换换思维休息一下),果然考验了心理素质和压力下的思考能力···
数据分析能力:起初我是这样的代码:(中间部分)
 
int ans;
          cin>>h>>m>>s;
          ans=int( fabs( (h%12)*30+0.5*m+(1.0*s)/120
                            -(m*6+0.1*s) ) );//fabs--cmath
          cout<<(ans>180? (360-ans) : (ans))<<endl;
 在测试第一个数据时发现结果输出的是139,我没想太多就改成AC的代码了,但是不知道为什么,现在想想也简单,题目要求输出的是最终夹角的int部分,而上面的代码在夹角小于180度时ans就是最终结果,可是大于的时候ans不是最终结果而且已经把小数部分省略的这样使得ans的值偏小···在cout的时候最终值偏大,所以要在最后输出的时候再强制转化才是正解.


0 0
原创粉丝点击