关于Online Judge题目tick and tick的数学公式推导

探讨通过解不等式来计算钟表上的时针、分针和秒针同时达到预设角度范围内的概率问题。文章介绍了一种计算方法,通过解决特定不等式找出指针处于指定状态的时间段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:
一个钟的三个指针在不停的转动,他们已经厌烦了这样,当他们互相的距离角度大于等于D时,他们会很开心,问一天之中他们happy的时间占总时间的概率。
我觉得这是在解不等式,我原来使用的暴力破解,毫无疑问失败了;我们只要找到某一分钟内,他们happy的时间,然后钟每过12个小时相当于43200秒复原一次。因此总时间就是43200白秒,只要求出在这43200的happy时间,答案就知道了;
假设现在的时钟是h小时,m分钟,s秒,给定的角度为degree;则列出happy的不等式有
时针到0时刻的角度的实际值为hw = (h+m/60+s/3600)*30,分针的角度mw = (m+s/60)6,秒针的角度为sw = s6;则他们都happy的条件为
degree<|hw -mw|<360 - degree;
degree<|hw - sw|<360 - defgree;
degree<|sw - mw|<360 - degree ;
解这三个不等式即可得到s的区间,把区间的最大值减去最小值就是happy的时间,把每小时每分钟的happy时间再叠加,就是总的happy时间了,再除以总时间的百分比并保留三个小数就是答案。

interval solve(double v,double a){//解方程  
        //Angle<=v*t+a<=360-Angle;,并且和[0,60]取交集  
        interval p;  
        if(v>0){  
            p.l=(Angle-a)/v;  
            p.r=(360-Angle-a)/v;  
        }  
        else{  
            p.l=(360-Angle-a)/v;  
            p.r=(Angle-a)/v;  
        }  
        if(p.l< 0)p.l= 0;  
        if(p.r>60)p.r=60;  
        if(p.l>=p.r)p.l=p.r=0;  
        return p;  
    }  
    interval jiao(interval a,interval b){  
        interval p;  
        p.l=max(a.l,b.l);  
        p.r=min(a.r,b.r);  
        if(p.l>=p.r)p.l=p.r=0;  
        return p;  
    }  
    /*解方程 Angle<=|hh-mm|<=360-Angle*/  
    /* Angle <= |30*h + m/2 + s/120 - 6*m - s/10| <= 360-Angle*/
    v_diff= 1.0/120.0 - 1.0/10.0; //second  
    a_diff= 30*h + m/2.0 - 6.0*m; //时针分针夹角  
    s0[0][0]=solve( v_diff, a_diff);  
    s0[0][1]=solve(-v_diff,-a_diff);  
    /*解方程 Angle<=|hh-ss|<=360-Angle*/ 
    /* Angle<=|30*h + m/2 + s/120 - s*6|<=360-Angle */  
    v_diff= 1.0/120-6.0;  
    a_diff= 30*h+m/2.0;//时针秒针夹角  
    s0[1][0]=solve( v_diff, a_diff);  
    s0[1][1]=solve(-v_diff,-a_diff);  
    /*解方程 Angle<=|mm-ss|<=360-Angle*/  
    /*Angle<=|6*m + s/10 - s*6|<=360-Angle*/
    v_diff=1/10.0 - 6;  
    a_diff= 6*m;//分针秒针夹角  
    s0[2][0]=solve( v_diff, a_diff);  
    s0[2][1]=solve(-v_diff,-a_diff);  

根据上述代码我们不难看出这个不等式 Angle <= | ax + b| <=360 - Angle 被转换为:
Angle <= ax + b < 360 - Angle && Angle <= -ax -b <= 360 - Angle,由于这个数学公式在高中学的,差不多还给老师了,于是自己有推算了一遍,如下图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值