【求助】.........我又来了
pascal吧
全部回复
仅看楼主
level 11
例题1:给n个数,求它们之中最大值和最小值,要求比较次数尽量小。
【方法2】分治策略n划分:把n个数均分为两半。即:划分点为d=(r1+r2)/2,两个区间为[r1,d]和[d+1,r2]。n递归求解:求左半的最小值min1 和最大值max1以及右半最小值min2和最大值max2。n合并:max1与max2比较得到所有数的最大值为maxx; min1与min2比较得到所有数的最小值为minn。
求........
我的代码:::::
var a,b:integer;
minn,maxx:integer;
x:array[1..1000] of integer;
procedure try(s1,s2,minn,maxx:integer);
var max1,min1,max2,min2,mid:integer;
begin
if s1=s2 then begin maxx:=x[s1]; minn:=x[s1]; end
else
if s1=s2-1 then
begin
if x[s2]>x[s1] then begin maxx:=x[s2]; minn:=x[s1]; end
else begin maxx:=x[s1]; minn:=x[s2]; end;
end
else
begin
mid:=(s1+s2) div 2;
try(s1,mid,min1,max1);
try(mid+1,s2,min2,max2);
if min1<min2 then minn:=min1 else minn:=min2;
if max1>max2 then maxx:=max1 else maxx:=max2;
end;
end;
begin
minn:=-1000;
maxx:=-1000;
readln(a);
for b:=1 to a do read(x[b]);
try(1,a,minn,maxx);
writeln(minn,* *,maxx);
end.
不知道我哪错了.......
2014年07月26日 08点07分 1
level 11
线段树?
2014年07月26日 10点07分 2
分治
2014年07月26日 11点07分
level 12
度娘自查
2014年07月27日 00点07分 3
level 12
std::minmax_element 233
2014年07月28日 03点07分 4
1