一道关于pascal的问题 寻找数组下标

来源:百度知道 编辑:UC知道 时间:2024/06/16 08:32:11
已知一个数组S,其中的元素互不相同,而且也已经
从小到大排列好。请用写一个程序,找出给定的数组中是
否有一个元素满足S[i]=i的关系。例如S有2, 1, 3, 7, 8,其
中S[3]=3,因此3就是答案。
数组的元素和规模(最大下标) N 都由键盘输入
解法分析二分查找
当x[mid]>i 时,下标i之后的数据都大于i,舍弃;
当x[mid]<i 时,下标i之前的数据都小于i,舍弃。

program xxx(input,output);
var
n,i:integer;
a:array[1..1000]of integer;
procedure search(i,j:longint);
var
mid:longint;
begin
if (i=j) and (a[i]=i) then begin
writeln(i);
exit;
end;
mid:=(i+j) div 2;
if a[mid]>i then search(i,mid-1);
if a[mid]<j then search(mid+1,j);
end.
begin
readln(n);
for i:=1 to n do read(a[i]);
search(1,n);
end.

var
procedure search(i,j:longint);
var mid:longint;
begin
if (i=j) and (a[i]=i) then begin writeln(i); exit; end;
mid:=(i+j) div 2;
if a[mid]>i then search(i,mid-1);
if a[mid]<j then search(mid+1,j);
end.
begin
readln(n);
for i:=1 to n do readln(a[i]);
search(1,n);
end.