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 |
被总是WA困扰的各位注意了!我有个发现!我一般都是编程序时用文件输入、文件输出(黑盒)的测试方法,提交时再删了。 但是,这里有个问题,用“黑盒”的方法看不出来,竟困扰了我2个多小时—— 对于每次有很多组数据的题,我们一般都按这种处理结构: 语句(可加循环条件) 输入一组数据 处理本组数据 输出本组数据的结果 语句(可加循环条件) 各位应该知道,这里的程序测试方法,都是要先把输入数据全输完,再看结果。 而这种结构,是输入一组,出一组结果;输入一组,出一组结果……所以在这里,这种结构是不可取的。 (如果明白了,下面就不用看了) 而应该用这样的两种结构之一: A 语句(可加条件) 输入一组数据 处理本组数据 将结果储存至一个数组 语句(可加条件) 然后用For循环按顺序输出结果 B 先输入数据,并储存至数组 然后挨组处理,并输出(或等处理完所有数据后一起输出) 对于本题,用第一种更好。 要注意(comicxmz001已经提到)数组定义100不够,会溢出 不用定义10000,定义1000就够 这样就可以了。 如果你还不明白,就看看代码(中国剩余定理,Pascal语言) 这个代码是正确的(输入完所有的再输出所有的): Var a,b,c,d,i:Integer; x:Array [1..1000] Of Integer; Begin i:=0; Repeat Readln(a,b,c,d); If a=-1 Then Break; i:=i+1; x[i]:=(5544*a+14421*b+1288*c) Mod 21252-d; If x[i]<=0 Then x[i]:=x[i]+21252; Until False; For a:=1 To i Do Writeln('Case ',a,': the next triple peak occurs in ',x[a],' days.'); End. 而这个是错误的(入一组出一组): Var a,b,c,d,i,x:Integer; Begin Assign(Input,'PKU1006.in'); Assign(Output,'PKU1006.out'); Reset(Input); Rewrite(Output); i:=0; Repeat Readln(a,b,c,d); If a=-1 Then Break; i:=i+1; x:=(5544*a+14421*b+1288*c) Mod 21252-d; If x<=0 Then x:=x+21252; Writeln('Case ',a,': the next triple peak occurs in ',x,' days.'); Until False; Close(Input); Close(Output) End. 可以在电脑上运行一下。 如果还有不明白的,可以给我发送消息,或者发邮件: 1151212428@qq.com Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator