【杭电1006】计算时钟指针分别呈相同角度的时间长度(AC)

原题目链接: 点击打开链接

参考思路(摘自杭电Discuss):
/***************************************************************************
*								  *
*	秒钟的速度s=6°/s,分针是1/10°/s,时针是1/120°/s			  *
*	所以相对速度s_m=59/10°/s,s_h=719/120°/s,m_h=120/11°/s		  *
*	所以相差一度所需要的时间sm=10/59 s/°,sh=120/719 s/°,mh=120/11 s/°   *
*	他们差360°的周期为tsm=3600/59 s,tsh=43200/719 s,tmh=43200/11 s	  *
*	需要相差的角度为n。                                                          *
*	rsm>n → n*sm+k1*tsm < t < tsm-n*sm+k1*tsm;			  *
*	rsh>n → n*sh+k2*tsh < t < tsh-n*sh+k2*tsh;		           *
*	rmh>n → n*mh+k3*tmh < t < tmh-n*mh+k3*tmh;			  *
*	三个条件都满足所占的总时间即为时针、分针、秒针相差角度大于n的总时间          *
*								  *
***************************************************************************/
codes below:
#include 
#include 

using namespace std;

int main()
{
    double sm=10./59.,mh=120./11.,hs=120./719.,
    tsm=3600./59.,tmh=43200./11.,ths=43200./719.;
    double result=0,d,f1,f2,f3,e1,e2,e3,op,ed;//d是度数
    while(scanf("%lf",&d)&&(d!=-1)){
        if(d==0)printf("100.000\n");
        else{
             result=0;
        //一圈是43200s
        //从十二点钟位置记零点
        ///s_m
        for(f1=sm*d,e1=tsm-sm*d;e1<=43200;f1+=tsm,e1+=tsm){//认为ex总比fx大

            for(f2=mh*d,e2=tmh-mh*d;e2<=43200;f2+=tmh,e2+=tmh){
                ///if 2和1区间没有交集
                if(e1
可能受到浮点数精度的影响,这种方法计算得到的0的结果是99. ……%,单独控制输出100,居然AC了。。。

你可能感兴趣的:(#ACM刷题笔记)