讨论 / 这题正确方法是什么?
zjlsykw3636 2008-08-17 06:09:00
点我顶贴 收藏 删除
我第一次是认为:

只要序列中不出现连续3个递增的数就是对的

var

xl:array[1..5000] of integer;

b:boolean;

n,i,j:integer;

begin

read(n);

for i:=1 to n do

read(xl[i]);

b:=true;

for i:=1 to n-2 do

if (xl[i]<xl[i+1])and(xl[i+1]<xl[i+2]) then

begin

b:=false;

break;

end;

if b=false then write(’Wrong’)

else write(’Right’);

end.

这个程序80分。。。其实这个想法是错的

第2个想法:

把出栈序列恢复为进栈序列

如果进栈序列为1,2,3....n 则序列正确

var

b:boolean;

n,i,j,t,k:integer;

xl:array[1..5000] of integer;

begin

readln(n);

b:=true;

for i:=1 to n do

read(xl[i]);

j:=1;

for i:=1 to n do

if xl[i]<xl[j] then

begin

k:=i;

while k>j do

begin

t:=xl[j];xl[j]:=xl[k];xl[k]:=t;

dec(k);

inc(j);

end;

j:=i+1;

end;

for i:=1 to n do

if xl[i]<>i then begin b:=false;break;end;

case b of

false:writeln(’Wrong’);

true:writeln(’Right’);

end;

end.

这个想法应该是对的~但是60分 = =|||| 无语。。

正确方法到底是什么?~

#1 Jollwish@2008-08-17 04:33:00
回复 删除
正确的输出序列中,每个数后面比它小的数都应按严格递减排列
#2 Jollwish@2008-08-17 06:09:00
回复 删除
我刚发了题解。。。
查看更多回复
提交回复