Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:用了double,3.1415926,还是WA,无法理解,请指点一下In Reply To:用了double,3.1415926,还是WA,无法理解,请指点一下 Posted by:sunmoonstar_love at 2005-07-06 00:49:31 if(fabs(t-tmp)<0.0000000000000001) break; 把这两句注释掉就可以了~~~ > > 基本思路就是二分法逼近,代码不长 > 请各位给些意见 > > #include <cstdio> > #include <cmath> > //#include <iostream> > using namespace std; > int main() > { > double l,n,c,t,u,d,r,l1,angle,tmp; > while(scanf("%lf%lf%lf",&l,&n,&c)&& (l!=-1)) > { > if(n==0.00) > { > printf("%.3lf\n",0); > continue; > } > l1 = l*(1+n*c); > tmp = l/l1; > u = 3.1415926*6/7; > d = 0; > while(fabs(u-d)>0.000000000001) > { > //这个函数是单调的,所以用二分法逼近 > angle = (u+d)/2;t = sin(angle)/angle; > if(fabs(t-tmp)<0.0000000000000001) > break; > if(t>tmp) > d = angle; > else > u = angle; > } > // r = l1/2/angle; > // tmp = r*(1-cos(angle)); > // printf("%.3lf\n",l1/angle/2*(1-cos(angle))); > printf("%.3lf\n",l1/angle/2*(1-cos(angle))); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator