Консольное приложение: const n=9; var l:array[1..n] of integer; i,max,imax,min,imin,s:integer; begin Randomize; writeln('Массив L:'); for i:=1 to n do begin l[i]:=random(51); write(l[i]:4); end; writeln; max:=l[1]; imax:=1; min:=l[1]; imin:=1; for i:=2 to n do begin if l[i]>max then begin max:=l[i]; imax:=i; end; if l[i]<min then begin min:=l[i]; imin:=i; end; end; writeln('max = l[',imax,'] = ',max); writeln('min = l[',imin,'] = ',min); s:=0; if imax>imin then for i:=imin+1 to imax-1 do s:=s+l[i] else for i:=imax+1 to imin-1 do s:=s+l[i]; writeln('s = ',s); end.
Пример: Массив L: 31 49 41 15 9 47 37 11 27 max = l[2] = 49 min = l[5] = 9 s = 56
const n=9;
var l:array[1..n] of integer;
i,max,imax,min,imin,s:integer;
begin
Randomize;
writeln('Массив L:');
for i:=1 to n do
begin
l[i]:=random(51);
write(l[i]:4);
end;
writeln;
max:=l[1]; imax:=1;
min:=l[1]; imin:=1;
for i:=2 to n do
begin
if l[i]>max then begin max:=l[i]; imax:=i; end;
if l[i]<min then begin min:=l[i]; imin:=i; end;
end;
writeln('max = l[',imax,'] = ',max);
writeln('min = l[',imin,'] = ',min);
s:=0;
if imax>imin
then for i:=imin+1 to imax-1 do s:=s+l[i]
else for i:=imax+1 to imin-1 do s:=s+l[i];
writeln('s = ',s);
end.
Пример:
Массив L:
31 49 41 15 9 47 37 11 27
max = l[2] = 49
min = l[5] = 9
s = 56
Приведём все степени к основанию 2
2^3702-2^468+2^1620-108
-108 можно представить как -128 + 16 + 4
2^3702-2^468+2^1620-2^7 + 2^4 + 2^2
Теперь выстраиваем степени в порядке убывания:
2^3702+2^1620-2^468-2^7 + 2^4 + 2^2
В выражении два вычитания подряд, избавимся от этого, заменив -2^468 на -2^469 + 2^468
2^3702+2^1620 -2^469+2^468-2^7 + 2^4 + 2^2
2^3702 - 1 единица
2^4 - 1 единица
2^2 - 1 единица
Количество единиц в вычитаниях будет равно разнице степеней. Например 1000000-100=1111
2^1620 -2^469 - количеств единиц 1620-469 = 1151
2^468-2^7 - количество единиц 468-7 = 461
Общее количество единиц равно 3+1151+461 = 1615