讨论 / 运行错误|无效浮点操作???
Jollwish 2012-05-29 07:17:00
点我顶贴 收藏 删除
我已经用extended了,为设么还无效浮点操作???

------------------------------------

测试结果1: 运行错误|无效浮点操作

测试结果2: 运行错误|无效浮点操作

测试结果3: 运行错误|无效浮点操作

测试结果4: 通过本测试点|有效耗时62:ms

测试结果5: 通过本测试点|有效耗时78:ms

提交代码:

{N+}

var a,b:array[1..10000]of longint;

ap,bp,ac,bc:extended;

an,bn,i:integer;

ad,bd:longint;

begin

readln(an,bn);

ad:=0;

bd:=0;

for i:=1 to an do

begin

read(a[i]);

ad:=ad+a[i];

end;

readln;

for i:=1 to bn do

begin

read(b[i]);

bd:=bd+b[i];

end;

ap:=ad/an;

bp:=bd/bn; //平均数

ac:=0;

bc:=0;

for i:=1 to an do ac:=ac+(a[i]-ap)*(a[i]-ap);

for i:=1 to bn do bc:=bc+(b[i]-bp)*(b[i]-bp);

ac:=ac/an;

bc:=bc/bn; //方差

if (an>bn)and(ap>bp)and(ac<bc) then write(’can’) else

begin

write(’can’);

write(chr(39));

write(’t’);

end;

end.

#1 DarkMaster@2008-08-14 17:17:00
回复 删除
注意这几句:

ap:=ad/an;

bp:=bd/bn; //平均数

ac:=ac/an;

bc:=bc/bn; //方差

数据有可能存在an或者bn为0的情况,如果不加以判断出现的浮点数操作错误会是被0除!

#2 xiaokeke@2008-08-14 18:41:00
回复 删除
ls正解

#3 Jollwish@2008-08-15 04:12:00
回复 删除
那如果是0怎么判断是否能保护圣火????
#4 Jollwish@2008-08-15 04:57:00
回复 删除
明白了...
#5 Jollwish@2008-08-15 05:02:00
回复 删除
还是不行...

--------------------------------------

测试结果1: 运行错误|无效浮点操作

测试结果2: 运行错误|无效浮点操作

测试结果3: 通过本测试点|有效耗时47:ms

测试结果4: 通过本测试点|有效耗时62:ms

测试结果5: 通过本测试点|有效耗时63:ms

提交代码:

{N+}

var a,b:array[1..10000]of longint;

ap,bp,ac,bc:extended;

an,bn,i:integer;

ad,bd:longint;

begin

readln(an,bn);

if an<bn then

begin

write(’can’);

write(chr(39));

write(’t’);

exit;

end;

ad:=0;

bd:=0;

for i:=1 to an do

begin

read(a[i]);

ad:=ad+a[i];

end;

readln;

for i:=1 to bn do

begin

read(b[i]);

bd:=bd+b[i];

end;

ap:=ad/an;

bp:=bd/bn;

ac:=0;

bc:=0;

for i:=1 to an do ac:=ac+(a[i]-ap)*(a[i]-ap);

for i:=1 to bn do bc:=bc+(b[i]-bp)*(b[i]-bp);

ac:=ac/an;

bc:=bc/bn;

if (an>bn)and(ap>bp)and(ac<bc) then write(’can’) else

begin

write(’can’);

write(chr(39));

write(’t’);

end;

end.

#6 Jollwish@2008-08-15 05:03:00
回复 删除
到底如果是0怎么判断是否能保护圣火????

darkmaster说一下...

#7 wyhbb163@2008-08-15 05:06:00
回复 删除
program fuzhou;

var

s,z:array[1..20000] of longint;

n,m,i:integer;

s1,s2,a1,a2,f1,f2:real;

begin

readln(n,m);

if n<=m then begin

writeln(’can’’t’);

halt;

end;

for i:=1 to n-1 do begin

read(s[i]);

s1:=s1+s[i];

end;

readln(s[n]);

s1:=s1+s[n];

for i:=1 to m-1do begin

read(z[i]);

s2:=s2+z[i];

end;

readln(z[m]);

s2:=s2+z[m];

if n<>0 then a1:=s1/n;

if m<>0 then a2:=s2/m;

if a1<=a2 then begin

writeln(’can’’t’);

halt;

end;

s1:=0;

s2:=0;

for i:=1 to n do s1:=(s[i]-a1)*(s[i]-a1);

f1:=s1/n;

for i:=1 to m do s2:=(z[i]-a2)*(z[i]-a2);

f2:=s2/m;

if f1>f2 then begin

writeln(’can’’t’);

halt;

end;

writeln(’can’);

end.

楼主将就这看吧,我是层层递进,不行就退,ac了

#8 Jollwish@2008-08-15 05:16:00
回复 删除
thanks!!!!!!

这烂题目,费我十次提交

#9 DarkMaster@2008-08-15 05:32:00
回复 删除
当an或bn为0的情况很好处理呀,加上这两句就行了!

if bn=0 then begin write(’can’); exit; end;

else if an=0 then begin write(’can’,#39,’t’); exit; end;

#10 DarkMaster@2008-08-15 05:34:00
回复 删除
没有同时为0的数据,因为同时为0不合题意,你做啥呀?如果你真的保险起见的话个人认为应该是can’t!
查看更多回复
提交回复