讨论 / 成绩单为什么倒数第二个点过不了
cwystc 2013-10-06 23:22:00
点我顶贴 收藏 删除
var a:array[1..130000] of longint;

b:array[0..14] of longint;

s:array[1..130000] of string[30];

n,i,x:longint;

procedure pp(l,r:longint);

var i,j:longint;

t,mid:string[30];

begin

i:=l; j:=r; mid:=s[(i+j) div 2];

repeat

while s[i]<mid do inc(i);

while s[j]>mid do dec(j);

if i<=j then

begin

t:=s[i]; s[i]:=s[j]; s[j]:=t;

inc(i); dec(j);

end;

until i>j;

if l<j then pp(l,j);

if i<r then pp(i,r);

end;

procedure px(l,r:longint);

var i,j,k:longint;

t,mid:string[30];

begin

i:=l; j:=r; mid:=s[(i+j) div 2];

repeat

while s[i]<mid do inc(i);

while s[j]>mid do dec(j);

if i<=j then

begin

t:=s[i]; s[i]:=s[j]; s[j]:=t;

k:=a[i]; a[i]:=a[j]; a[j]:=k;

inc(i); dec(j);

end;

until i>j;

if l<j then px(l,j);

if i<r then px(i,r);

end;

begin

readln(n);

for i:=1 to n do

begin

readln(s[i]);

x:=pos(' ',s[i]);

val(copy(s[i],x+1,length(s)-x),a[i]);

if (a[i]>0) and (a[i]<150) then inc(b[a[i] div 10]);

delete(s[i],x,length(s)-x+1);

end;

writeln('1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149');

for i:=0 to 13 do

write(b[i],' ');

writeln(b[14]);

px(1,n);

x:=0;

for i:=1 to n do

begin

writeln(s[i],' ',a[i]);

if a[i]=150 then

begin

inc(x);

s[x]:=s[i];

end;

end;

writeln(x);

if x=0 then writeln('NO')

else begin

pp(1,x);

for i:=1 to x do

writeln(s[i]);

end;

end.

大家帮忙看看程序!!!

查看更多回复
提交回复