题意: 给你一个24格式的数字时间,(字符串),问你这个时刻时针与分针 时针与秒针 分针与秒针 之间的夹角,

我们发现 秒针每秒转6度,分针每秒转1/10度,每分转6度,时针每小时转30度,每分转1/2度,没秒转

1/120 度,那么我们将表盘看做一个坐标系,12点钟为起点,那么可以计算出每个指针这一刻的角度是多少,但是为了避免

分数的加减,我们将所有的数通分,同时乘以120,那么圆盘一圈360 度变成了360*120 =43200度,肯定在int内,将时间转化

为12制的时间,计算角度,然后做差得到角度,但是输出是范围是0-180 ,所以要求小角,选择 min(x,43200-x)作为差值

,然后要化简为最简分式就可以了,(分子是120)

假设当前时间为 H:M:X
时针此时的度数:

分针此时的度数:

秒针此时的度数:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
using namespace std;
int gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return gcd(b,a%b);
}
int main()
{
    int h,m,s;
    int H,M,S;
    int ans1,ans2,ans3;
    char str[20];
    int t;
    cin>>t;
    while(t--)
    {
        cin>>str;
        h=(str[0]-'0')*10+(str[1]-'0');
        m=(str[3]-'0')*10+(str[4]-'0');
        s=(str[6]-'0')*10+(str[7]-'0');
         if(h>=12)
            h-=12;
 
        //cout<<h<<endl;
         H=h*3600+m*60+s;
        M=m*720+12*s;
        S=s*720;
 
        ans1=max(H,M)-min(H,M);
        ans2=max(H,S)-min(H,S);
        ans3=max(M,S)-min(M,S);
 
        ans1=min(ans1,43200-ans1);
        ans2=min(ans2,43200-ans2);
        ans3=min(ans3,43200-ans3);
 
        int g1,g2,g3;
        g1=gcd(ans1,120);
        g2=gcd(ans2,120);
        g3=gcd(ans3,120);
 
        ans1/=g1;
        ans2/=g2;
        ans3/=g3;
 
        int f1,f2,f3;
        f1=120/g1;
        f2=120/g2;
        f3=120/g3;
 
        if(f1==1)
        {
            cout<<ans1<<" ";
         }
 
        else
        {
            if(ans1==0)
             {
                cout<<0<<" ";
            }
            else
                cout<<ans1<<"/"<<f1<<" ";
        }
 
         if(f2==1)
        {
            cout<<ans2<<" ";
        }
 
        else
        {
            if(ans2==0)
                 cout<<0<<" ";
            else
                cout<<ans2<<"/"<<f2<<" ";
        }
 
        if(f3==1)
        {
             cout<<ans3<<" "<<endl;
        }
 
        else
        {
             if(ans3==0)
                cout<<0<<" "<<endl;
             else
                cout<<ans3<<"/"<<f3<<" "<<endl;
        }
    }
    return 0;
}

hdu5387 钟表指针之间夹角(分数计算,模拟)的更多相关文章

  1. HDU 5387 Clock(分数类+模拟)

    题意: 给你一个格式为hh:mm:ss的时间,问:该时间时针与分针.时针与秒针.分针与秒针之间夹角的度数是多少. 若夹角度数不是整数,则输出最简分数形式A/B,即A与B互质. 解析: 先计算出总的秒数 ...

  2. 1549: Navigition Problem (几何计算+模拟 细节较多)

    1549: Navigition Problem Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 256 Mb     Su ...

  3. C++指针之间的赋值与转换规则总结

    C++指针之间的赋值与转换规则总结 Note:以下结论不适用于类的成员函数指针,关于类的成员函数指针会单独讨论. 一.任何类型的指针变量均可直接赋值给const void * 任何类型的非const指 ...

  4. PAT甲题题解-1081. Rational Sum (20)-模拟分数计算

    模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algori ...

  5. PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算

    输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验 ...

  6. mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

    根据经纬度计算距离公式 公式 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung ...

  7. 美团2018年CodeM大赛-资格赛 分数 暴力模拟

    链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...

  8. 你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题

    一.使用sizeof计算数组长度 1.1 sizeof的基本使用 如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof: ,,,,,}; int ...

  9. 【11.9校内测试】【倒计时1天】【ak欢乐赛】【多项式计算模拟】

    然而AK失败了,就是因为这道摸你题:(最后一篇题解了吧?QAQ) Solution 模拟多项式乘法,其中的运算处理很像高精度,不过第$i$位代表的就是$x^i$前面的系数了. 好像去年的时候就讲了表达 ...

随机推荐

  1. honeyd使用

    honeyd可以同时模仿上千个不同的计算机 官网 honeyd-1.5c.tar.gz:http://www.honeyd.org 依赖包 libevent-1.3a.tar.gz:http://li ...

  2. GitHub Java项目推荐|功能丰富的 Java 工具包|提高开发效率

    GitHub Java项目推荐|功能丰富的 Java 工具包|提高开发效率 功能丰富的 Java 工具包.它帮助我们实现了常用的工具方法,从而减少代码的体积,提高开发效率.该项目最初是作者工作项目中的 ...

  3. python(读取excel操作-xlrd模块)

    一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 或者在cmd窗口  pip install  ...

  4. C++的struct可以使用template

    C++里面的struct是可以使用template的,然而http://c.biancheng.net/view/2235.html这里竟然说不能用.辣鸡啊. #include <stdio.h ...

  5. Linux 目录和文件的操作

    整理常用的linux命令,关于目录和文件的操作,用于巩固记忆,以备不时之需. [root@localhost ~] root:当前用户 localhost:主机名 ~:当前所在位置 符号#:管理员 符 ...

  6. zsh of kali

    首先安装zsh: # apt-get update # apt-get install zsh -y 然后直接使用仓库脚本: # sh -c "$(wget https://raw.gith ...

  7. Mysql【第二课】

  8. 【Beta】Scrum meeting3

    第三天:2019/6/26 前言: 第3次会议于6月26日在教9-501召开. 对每个人负责撰写的文档进行分配,并讨论其中模糊的问题,时长30min. 本日任务完成情况 成员 今日完成任务情况 成员贡 ...

  9. 性能:Output层面

    将数据保存到MySQL中 import java.sql.DriverManager import org.apache.spark.storage.StorageLevel import org.a ...

  10. GitHub与Markdown(学习笔记)

    一.学前提问: 1.GitHub用翻墙吗? 访问 GitHub 不用翻墙,只是可能访问速度稍慢些. 2.英语差学得会吗? GitHub 虽然都是英文,但是,对英语水平的要求不是那么高,都是些简单的单词 ...