杭电1006

先给链接:杭电 1006


题目大意:

       指针有一个快乐时间,就是时钟上三个针所形成的角度大于输入的D的时候,求一天内快乐时间所占的比例。


题目思路:

       首先想到的是有没有公式,然而并没有得到公式,所以采取模拟的思路


贴代码:

#include <cstdio>
using namespace std;
double max1(double a,double b,double c){
    if(a<b) a=b;
    if(a<c) a=c;
    return a;
}
double min1(double a,double b,double c){
    if(a>b) a=b;
    if(a>c) a=c;
    return a;
}
inline bool equal1(double a,double b){
    if((a-b)>-0.0000001&&(a-b)<0.0000001) return true;
    else return false;
}
int main(){
    double sum=0.0,d,newx,newy;
    double mh=43200.0000/11;
    double sm=3600.0000/59;
    double sh=43200.0000/719;
    double dsm,dsh,dmh,tdsm,tdsh,tdmh;
    while(scanf("%lf",&d)&&d!=-1){
        sum=0.0;
	dsm=10.0*d/59.0;tdsm=sm-dsm;
	dsh=120.0*d/719.0;tdsh=sh-dsh;
	dmh=120.0*d/11.0;tdmh=mh-dmh;
	newx=max1(dsm,dsh,dmh); newy=min1(tdsm,tdsh,tdmh);
	while(newx<=43200&&newy<=43200){
            newx=max1(dsm,dsh,dmh);
            newy=min1(tdsm,tdsh,tdmh);
            if(newx<newy) sum+=newy-newx;

            if(newy==tdsm) {dsm+=sm;tdsm+=sm;}
            else if(newy==tdsh){dsh+=sh;tdsh+=sh;}
            else if(newy==tdmh){dmh+=mh;tdmh+=mh;}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>printf("%.3lf\n",sum/432);
    }
    return 0;
 }

(吐槽:这个题不想再做第二遍了,快吐了)


注意事项:

    尽量少用double的乘除法,会增加耗时

题目精髓在于求出三个指针的相遇周期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值