杭电ACM1006求改错

[复制链接]
查看11 | 回复1 | 2010-8-10 12:51:29 | 显示全部楼层 |阅读模式
#include
int main()
{

int h,m,s,i,sum;

float dh,dm,ds,d,max,mid,min,dd=0;

while(scanf("%f",&d)!=EOF)

{

if(d==-1) break;

for(h=0,sum=0;hdh) {max=dm;min=dh;}

else min=dm;


ds=s*6;

if(ds>max) {mid=max; max=ds;}

else{mid=min;min=ds;}

if(mid-min>=d&&max-mid>=d&&(min+360-max)>=d)

sum++;


}


printf("%.3f\n",sum/(36*12.0));

}

return 0;神题,求改错,高手别放过~~

回复

使用道具 举报

千问 | 2010-8-10 12:51:29 | 显示全部楼层
本题的核心是追击问题.时间是连续的,另外要注意区间的交运算.程序的算法是:已知秒针,分针,时针的速度分别为:Vs=6度/s;Vm=1/10度/s;Vs=1/120度/s;首先根据给出的角度生成三个指针夹角大于该角度的所有区间,然后求区间的交,并进行统计.首先是三个针角度的函数:秒针:6t分针:(t%60)/10时针:(t%3600)/120a是题目给你的限制时间 a <= | 6*t-(t%60)/10| <= 360-a a <= | 6*t-(t%3600)/120 | <= 360-a a <= | (t%60)/10-(t%3600)/120 | <= 360-a时间只要满足上市就是h
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行