zoukankan      html  css  js  c++  java
  • UvaLive 6664 Clock Hands

    链接:http://vjudge.net/problem/viewProblem.action?id=49409

    题意:给一个奇怪的能够记录N小时内时间的表(生活中的表是12小时计时的)。

    而且给出一个当前时间,求下一个出现的秒针恰巧在时针和分针中间的情况的时间,输出整数的小时和分钟还实用分数表示的秒。

    思路:

    首先计算时针分针秒针当前转动角度。记整个表盘总角度为1.



    设经过了ss时间后,出现题目中要求的情况。

    则可列出式子:


    将上述带入,化简得:


    我们要取的是k=1时候的情况。假设k=1时三个针恰好重叠,那就取k=2时,从小到大向上取。当中的小问题就在于怎样分数表示秒。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    #include<cstdlib>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<ctype.h>
    #include<algorithm>
    #include<string>
    #define PI acos(-1.0)
    #define maxn 10005
    #define INF 0x7fffffff
    typedef long long ll;
    using namespace std;
    int gcd(int x,int y)
    {
        return y?

    gcd(y,x%y):x; } int main() { int H,h,m,s,ans_h,ans_m,ans_s; while(scanf("%d%d%d%d",&H,&h,&m,&s)&&!(!H&&!h&&!m&&!s)) { int hh=3600*h+60*m+s; int mm=60*m*H+s*H; int ss=60*s*H; int K=3600*H; int cmp=mm+hh-ss*2; cmp=(cmp%K+K)%K; int aa=119*H-1; while(1) { int a=aa; int c=cmp; int t=gcd(a,c); a/=t;c/=t; ans_h=(h+(m+(a*s+c)/(a*60))/60)%H; ans_m=(m+(a*s+c)/(a*60))%60; ans_s=(a*s+c)%(a*60); if((3600*ans_h+60*ans_m)*a+ans_s!=60*ans_m*a*H+ans_s*H) { printf("%d %d %d %d ",ans_h,ans_m,ans_s,a); break; } cmp+=K; } } return 0; }



查看全文
  • 相关阅读:
    愚公oracle数据库同步工具
    外部服务的隔离及降级
    使用redis来实现分布式锁
    php 无限极栏目 Tree 树格式 层级显示 【列表记录按顺序缩进显示】
    腾讯地图添加多marker标注样式
    MIME 视频 , 文件下载与播放权限
    php json_encode 对浮点 精度 问题 解决
    phpexcel 导入 时间格式 和 数值格式 处理
    phpexcel写入追加已有的excel文件
    php 判断字符串是否可以转 浮点型
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10954634.html
  • Copyright © 2011-2022 走看看