2008年信息学奥赛初赛试题及答案的完善程序

 我来答
温柔_7758
2016-06-03 · TA获得超过159个赞
知道答主
回答量:182
采纳率:0%
帮助的人:122万
展开全部

五.完善程序(前6空,每空3分,后5空,每空2分,共28分)。
1.(找第k大的数)给定一个长度为1000000的无序正整数序列,以及另一个数n(1<=n<=1000000),接下来以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3大的数是4)
Var a:array[1..1000000] of integer;
n,m,ans:integer;
procedure swap(var a,b:integer);
var t:integer;
begin
if (a<>b) then begin
t:=a; a:=b; b:=t;
end;
end;
Function FindKth(left,right,n:integer):integer;
Var tmp,value,i,j:integer;
begin
if left=right then exit(left);
tmp:=random(right-left)+left;
swap(a[tmp],a[left]);
value:=____①_____
i:=left; j:=right;
while i<j do
begin
while (i<j) and (________②______) do dec(j);
if i<j then begin
a:=a[j];inc(i);
end else break;
while (i<j) and (___③___) do inc(i);
if i<j then begin
a[j]:=a[i]; dec(j);
end else break;
end;
____④_____
if i<n then begin inc(i); exit(FindKth(_____⑤_____));end;
if i>n then begin dec(j); exit(______⑥________);end;
exit(i);
end;
var i:integer;
begin
randomize;
ans:=-1;
m:=5;
for i:=1 to m do
read(a[i]);
read(n);
ans:=FindKth(1,m,n);
writeln(a[ans]);
end.
2.(矩阵中的数字)有一个n*n(1≤n≤5000)的矩阵a,对于1≤i<n, 1≤j≤n, a[i,j]<a[i+1,j] a[j,i]<a[j,i+1]。即矩阵中左右相邻的两个元素,右边的元素一定比左边的大。上下相邻的两个元素,下面的元素一定比上面的大。给定矩阵a中的一个数字k,找出k所在的行列(注意:输入数据保证矩阵中的数各不相同)。
var
n,k,answerx,answery:integer;
a:array[1..5000,1..5000] of integer;
Procedure FindKPosition;
Var I,j:integer;
Begin
i:=n; j:=n;
while j>0 do begin
if a[n,j]<k then break;
dec(j);
end;
______①_________
while a[i,j]<>k do
begin
while (___②_____) and (i>1) do dec(i);
while (___③_____) and (j<=n) do inc(j);
end;
_______④________
_______⑤________
end;
var i,j:integer;
begin
read(n);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
read(k);
FindKPosition;
writeln(answerx,' ',answery);
end.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式