Автор | Паскаль |
for i:= 1 to n do
for j:= 1 to n - i do
if a[j]>a[j+1] then
begin
x:= a[j+1];
a[j+1]:=a[j];
a[j]:=x;
end;
Это для сортировки по возрастанию. Для сортировки по убыванию нужно поменять знак > на знак <.
Что касается второй задачи, то она сильно отличается от первой по уровню. Тут и проверять нужно входные данные по нескольким критериям и искать эти самые последовательности. На паскале ничем помочь не могу. |
Большое спасибо, с этим разобрался. А вот в такой задаче:
Дан массив. Необходимо его циклически сдвинуть на k элементво вправо. Разрешается использовать только несколько дополнительных переменных в памяти.
Как сделать, чтобы x[N] следовало за x[1], и как обойтись без дополнительного массива?
Еще требуют дать для каждой задачи оценку сложности алгоритма. "Этта было не просто" никого не устроит? |
Разрешается использовать только несколько дополнительных переменных в памяти.
Обожаю такие критерии))) |
"Дан массив. Необходимо его циклически сдвинуть на k элементво вправо. Разрешается использовать только несколько дополнительных переменных в памяти."
как-то так:
for i:=1 to k do begin
b:=a[1];
for j:=2 to n do
a[j-1]:=a[j];
a[n]:=b;
end;
или(смотря где право)
for i:=1 to k do begin
b:=a[n];
for j:=n-1 downto 1 do
a[j+1]:=a[j];
a[1]:=b;
end;
k - на сколько элементов сдвигать
a - исходный массив
n - номер последнего элемента массива |
Дана последовательность целых чисел, среди которых нет одинаковых. Требуется вычеркнуть минимальное возможное количество чисел так, чтобы оставшиеся шли в порядке возрастания
проверить неначем, но как-то так:
l:=0;
for i:=1 to n-1 do begin
__for j:=1 to n do
____b[j]:=0;
__for m:=1 to n-i do begin
____b[i]:=1;
____c:=a[i];
____k:=1;
____for j:=i+m to n do
______if c<a[j] then begin
________c:=a[j];
________b[j]:=1;
________k:=k+1;
______end;
____if k>l then begin
______l:=k;
______for j:=1 to n do
________d[j]:=b[j];
____end;
__end;
end;
for j:=1 to n do
__a[j]:=a[j]*d[j];
и далее нулевые элементы удаляем.
фишка в том, что "тупым" перебором ищем вариант с наибольшим числом остающихся цифр, затем ненужные цифры обнуляем и удаляем. |
Спасибо, проверю. А как оценить сложность алгоритма? |
Насчет 25 ошибочка, как минимум одна:
3 и 4 строчки(for j:=1 to n do b[j]:=0;) надо написать перед b[i]:=1;
Сложность алгоритма.. точно не знаю, но можно по количеству циклов, ветвлений, использованных переменных, по числу всех операций, времени выполнения алгоритма. |
спасибо большое |