【试题描述】
N个小朋友在一起做游戏。
每个小朋友在自己的硬纸板上写一个数,然后同时举起来。
接着,小y老师提一个问题,看哪个小朋友先抢答出来。
问题是:在这N个数中,第K大的是哪个数?请你编程完成。
【输入描述】
输入文件的第一行为2个整数,依次为N和K( K <= N <= 10000 )。
下面N行,每行为一个整数,表示从第1个小朋友到第N个朋友分别写的数。假设这些小朋友只知道-32768~32767之间的数。
【输出描述】
输出文件只有一行,就一个数,为第K大的那个数。
【输入样例】
4 3
1
2
2
4
【输出样例】
2
【试题来源】
var
a:array[1..10000] of longint;
i,j,n,k,temp:longint;
begin
readln(n,k);
for i:=1 to n do
readln(a[i]);
for i:=1 to n do
for j:=i+1 to n do
if a[j]>a[i] then begin temp:=a[j]; a[j]:=a[i]; a[i]:=temp; end;
writeln(a[k]);
end.
快速排序找第K大的数
在n个不同元素中找出第K个最大元素。
program search_k;
var i,j,k:integer;
a:array[1..100] of integer;
procedure search(b,e:integer);
var i,m,t:integer;
begin
if b=e then begin j:=b;exit end;
i:=b;j:=e;m:=a[k];
repeat
while a[i]>m do inc(i);
while m>a[j] do dec(j);
if i<j then begin t:=a[i];a[i]:=a[j];a[j]:=t; end;
until i>=j;
if i=k then exit;
if i>k then search(b,j) else search(j+1,E);
end;
procedure print(n:integer);
var i:integer;
begin
for i:=1 to n do write(a[i],' ');
writeln;
writeln('a[',k,']=',a[k]);
end;
begin
write('n='); readln(n);
write('a[1..',n,']=');
for k:=1 to n do read(a[k]);
readln;
write('k=');readln(k);
search(1,n);
print(n);
end.
浙公网安备 33010602011771号