题目:http://acm.hdu.edu.cn/showproblem.php?pid=1006

题意:

24小时中,三个指针之间超过某个度数的时间占所有时间的百分比是多少。

思路:主要是物理和数学的综合 难在相对速度的运用
秒钟的速度

s=6°/s,分针是1/10°/s,时针是1/120°/s

所以相对速度

s_m=59/10°/s,s_h=719/120°/s,m_h=11/120°/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的总时间

在对两两指针之间满足条件的开始时间和结束时间进行遍历(三重循环),把所有满足条件的时

间累加起来就是所求满足条件的总时间。最后结果为:满足条件的总时间/43200*100。

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
// 秒针速度 s = 6°/s 分针速度 m = 1/10° /s 时针 h = 1/120° /s
const double SH = 719.0/, SM = 59.0/, MH = 11.0/;//Relative angular velocity 相对角速度
const double tSH = 43200.0/, tSM = 3600.0/, tMH = 43200.0/; double Min(double a,double b,double c)
{
return min(a,min(b,c));
} double Max(double a,double b,double c)
{
return max(a,max(b,c));
} int main()
{
double D;
while(cin >> D && D!=-)
{
double bSH,bSM,bMH,eSH,eSM,eMH,Begin,End,Sum = ;
bSH = D / SH;
bSM = D / SM;
bMH = D / MH;
//计算第一次开始时间
eSH = (-D)/SH;
eSM = (-D)/SM;
eMH = (-D)/MH;
//计算第一次结束时间
for(double b3 = bSH,e3 = eSH; e3 <= 43200.000001; b3+=tSH,e3+=tSH)
{
for(double b2 = bMH,e2 = eMH; e2 <= 43200.000001; b2+=tMH,e2+=tMH)
{
if(e2 < b3) //判断是否有交集
continue;
if(e3 < b2)
break;
for(double b1 = bSM,e1 = eSM; e1 <= 43200.000001; b1+=tSM,e1+=tSM)
{
if(e1 < b2 || e1 < b3)
continue;
if(b1 > e2 || b1 > e3)
break;
Begin = Max(b1,b2,b3); //开始时间取最大,以满足全部要求
End = Min(e1,e2,e3); //结束时间取最小,以满足全部要求
Sum += (End-Begin);
}
}
}
printf("%.3lf\n",Sum/);
}
return ;
}

最新文章

  1. 分享在winform下实现左右布局多窗口界面-续篇
  2. Protocol Framework - SNMP Tutorial
  3. PCA降纬一步一步
  4. MongoDB学习:(一)MongoDB安装
  5. 自定义NSLog宏输出
  6. HIHO 线段树(单点)
  7. IE下载打印文件的时候,下载打印闪一下就没有了
  8. Codeforces Round #321 (Div. 2) B. Kefa and Company 二分
  9. WIX: Hide installed program from the Add/Remove Programs window.
  10. swfupload 上传控件的配置
  11. Linux强制踢出登录用户(断线账户剔除)
  12. 微信或手机浏览器在线显示office文件(已測试ios、android)
  13. [转] 面向对象原则之GOF是招式,九大原则才是精髓
  14. Beta版本冲刺前期计划及安排
  15. 详解MySQL数据类型
  16. JAVA 第二天 基本数据类型
  17. 迁移虚拟机打开快照报错:CPUID错误
  18. python爬虫之短信报警
  19. Winform 基础二 最小化 最大化 关闭 点击任务栏隐藏显示 点击鼠标左键移动窗体
  20. windows和linux下如何远程获取操作系统版本和主机名

热门文章

  1. MySQL数据库权限分类
  2. docker文件复制到centos/linux/ubantun环境下
  3. 正则表达式过滤html标签
  4. Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)
  5. python中利用上下文管理器来实现mysql数据库的封装
  6. GAN-生成对抗网络原理
  7. requests之json系列(一)
  8. base | AtomicIntegerT类
  9. order by 导出数据不一致的问题
  10. 基于STM32单片机光学指纹识别模块(FPM10A)全教程(基于C语言)