procedure quicksort(l,r:integer); var i,j,x,temp:integer; begin i:=l; //левый конец j:=r; //правый конец x:=ar[random(r-l+1)+l]; repeat while ar[i]<x do inc(i); //пока выбранный элемент больше всех, что левее его(всё норм), увеличивать индекс while x<ar[j] do dec(j); //пока выбранный элемент меньше всех, что правее его(всё норм), уменьшать индекс if i<=j then //если левый индекс меньше или равен правому-продолжать begin temp:=ar[i]; ar[i]:=ar[j]; ar[j]:=temp; inc(i); //чтобы не запустить бесконечную рекурсию dec(j); end; until i>=j; if l<j then quicksort(l,i); //l-левый конец нового витка, j-правый if r>i then quicksort(i,r); //r-левый конец нового витка, i-правый end;
begin randomize; writeln('First array:'); for s:=1 to n do begin ar[s]:=random(n); write(ar[s]:4); end; quicksort(1,n); writeln; writeln('Final array:'); ar.println; end.
//По убыванию Const n=55;
type ty=array[1..n] of integer;
Var ar:ty; s:integer;
procedure quicksort(l,r:integer); var i,j,x,temp:integer; begin i:=l; //левый конец j:=r; //правый конец x:=ar[random(r-l+1)+l]; repeat while ar[i]>x do inc(i); //пока выбранный элемент больше всех, что левее его(всё норм), увеличивать индекс while x>ar[j] do dec(j); //пока выбранный элемент меньше всех, что правее его(всё норм), уменьшать индекс if i<=j then //если левый индекс меньше или равен правому-продолжать begin temp:=ar[i]; ar[i]:=ar[j]; ar[j]:=temp; inc(i); //чтобы не запустить бесконечную рекурсию dec(j); end; until i>=j; if l<j then quicksort(l,i); //l-левый конец нового витка, j-правый if r>i then quicksort(i,r); //r-левый конец нового витка, i-правый end;
begin randomize; writeln('First array:'); for s:=1 to n do begin ar[s]:=random(n); write(ar[s]:4); end; quicksort(1,n); writeln; writeln('Final array:'); ar.println; end.
Заведём ещё один массив и будем в него записывать, правда ли, что в массиве есть элементы, равные данному, и текущий элемент - первый из них. Затем выведем все элементы, для которых это оказалось правдой.
Pascal var i, j, n: integer; flag: boolean; a: array[1..10000] of integer; b: array[1..10000] of boolean; begin read(n); for i := 1 to n do begin read(a[i]); b[i] := true; end; b[n] := false;
for i := 1 to n - 1 do if b[i] then begin flag := true; for j := i + 1 to n do if a[i] = a[j] then begin flag := false; b[j] := false; end; if flag then b[i] := false; end; for i := 1 to n do if b[i] then write(a[i], ' '); end.
Если пешками ходить запрещено, то можно ходить только конями. Коней два, каждый может сходить на одно из двух полей, следовательно имеются 4 варианта ходов. После того, как ход белых был сделан, неопределенность в знаниях черных уменьшилась в 4/1=4 раза. 4=2², поэтому полученное количество информации составляет 2 бита.