hdu1006

来源:互联网 发布:gdp有月度数据吗 编辑:程序博客网 时间:2024/05/29 03:16

步骤:

列出时间(h:m:s)与度数(rh:rm:rs)之间的方程:

rs=6*s; rm=6*m+s/10; rh=30*h+0.5*m+s/120;
各针之间的角度如下:

rm-rs=6*m+(0.1-6)*s; rh-rs=30*h+0.5*m+(1/120)-6)*s;rh-rm=30*h+(0.5-6)*m+((1/120)-0.1)*s;

指针间的度数要在d到360-d之间,即解三个|ax+b|型的不等式:(s为唯一未知数)

可以求出任意一分钟内的秒针取值范围,然后每分钟都求一遍。



#include<stdio.h>
#include<stdlib.h>
#include<math.h>

/*定义区间的上下限*/
typedef struct Extent
{
double l,r;
}extent;
double degree;
/*需要degree<|ax + b |<360-dgree即可解不等式*/
extent method(double a,double b)
{
extent  p;
if(a > 0)
{
p.l = (degree - b)/a;
p.r = (360 - degree - b)/a;
}
else if(a < 0)
{
p.r = (degree - b)/a;
p.l = (360 - degree - b)/a;
}
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;
}

/*求最大值*/
double max(double a,double b)
{
return a > b ?a:b;
}

/*求最小值*/
double min(double a,double b)
{
return a < b?a:b;
}

/*求交集*/
extent mixed(extent p1,extent p2)
{
extent p;
p.l = max(p1.l,p2.l);
p.r = min(p1.r,p2.r);
if(p.l >= p.r)
{
p.l = p.r = 0;
}
return p;
}

double happytime(int h,int m)
{
extent s[3][2];/*用来保存不等式的解*/
extent x;/*保存交集*/
double a1,a2,a3;
double b1,b2,b3;
a1 = 1/120.0 - 1 /10.0,b1 = h * 30.0 + m /2.0 - m * 6.0;/*hw - mw得到的a1x+b1*/
a2 = 1/120.0 - 6.0,b2 = h * 30.0 + m /2.0;/*hw - sw得到的a2x+b2*/
a3 = 6.0 - 0.1,b3 = -1*m*6.0;/*sw - mw得到的a3x+b3*/
s[0][0] = method(a1,b1);/*s[0]保存不等式degree<|a1x+b1|<360-degree的解*/
s[0][1] = method(-a1,-b1);
s[1][0] = method(a2,b2);/*s[1]保存不等式degree<|a2x+b2|<360-degree的解*/
s[1][1] = method(-a2,-b2);
s[2][0] = method(a3,b3);/*s[2]保存不等式degree<|a3x+b3|<360-degree的解*/
s[2][1] = method(-a3,-b3);

/*然后再s[0],[s1],s[2]中找交集*/
/*把三个不等式的解每次那一个出来,一共有8个交集,把这八个交集的值再并起来,就是把交集区间的值都加起来就是这一分钟的*/                
       /*happy时间*/
double sum = 0.0;/*保存最终结果*/
for(int i = 0;i < 2;++i)
{
for(int j = 0;j < 2;++j)
{
for(int k = 0;k < 2;++k)
{
x = mixed(mixed(s[0][i],s[1][j]),s[2][k]);
sum += (x.r - x.l);
}
}
}
return sum;
}
 

int main()
{
int h,m;
double count;
while(1)
{
count = 0.0;
scanf("%lf",&degree);
if(degree == -1)
{
break;
}
for(h = 0;h < 12;++h)
{
for(m = 0;m < 60;++m)
{
count += happytime(h,m);
}
}
printf("%.3lf\n",count/432.0);
}
return 0;

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鼻子不通通气鼻屎粘在鼻子怎么办 鼻子里面干燥长鼻屎怎么办 鼻孔里干的难受怎么办 每天有很多鼻屎怎么办 鼻子里面干的疼怎么办 婴儿鼻屎堵住了怎么办 婴儿有很多鼻屎怎么办 隆鼻7天好多鼻屎怎么办 隆鼻第五天好多鼻屎怎么办 小孩鼻屎堵住了怎么办 风寒感冒流清鼻涕怎么办 流清鼻涕吐黄痰不发烧怎么办 宝宝流黄鼻涕发烧怎么办 感冒了浓鼻涕多怎么办 感冒流浓鼻涕怎么办速效办法 孩子一直流清水鼻涕怎么办 宝宝鼻子呼噜呼噜响怎么办 鼻涕往嗓子里流怎么办 咳嗽痰多鼻涕多怎么办 没感冒嗓子痰多鼻涕怎么办 孩子感冒后鼻涕特别多怎么办 经常有鼻涕怎么办才好 怀孕后鼻涕痰多怎么办 鼻炎有鼻涕痰多怎么办 宝宝咳嗽痰多鼻涕多怎么办 宝宝两岁清鼻涕咳嗽痰多怎么办 喉咙咸咸的有痰怎么办 宝宝咳嗽鼻塞喉咙有痰怎么办 绝地求生刺激战场射击键误触怎么办 在皮卡堂卡的游泳了怎么办 假如遇到老赖没能力还钱怎么办 服刑人拒不执行伤害赔偿怎么办? 面对当前严峻形势作为军人怎么办 想起诉不知道对方地址怎么办 遇见家里来嫌疑人员怎么办 老滚5老婆死了怎么办 美化包安装之后闪退怎么办 蕉下的伞坏了怎么办 苹果7通话音质特别差怎么办 雨伞的伞骨坏了怎么办 雨伞的铁丝掉了怎么办