ЗАДАЧИ
problems.ru
О проекте | Об авторах | Справочник
Каталог по темам | по источникам |
К задаче N

Проект МЦНМО
при участии
школы 57
Фильтр
Сложность с по   Класс с по  
Выбрано 2 задачи
Версия для печати
Убрать все задачи

Количество операций

Дана программа сортировки (p141.pas). Требуется узнать, сколько раз
при сортировке конкретного массива с помощью этой программы
выполняется операция сравнения двух элементов массива (строка 25 программы).

Входные данные
В файле input.txt записан массив в формате (и удовлетворяющий ограничениям)
из задачи 136.

Выходные данные
В файл output.txt ваша программа должна печатать одно число - сколько
раз в процессе сортировки этого массива программой p141.pas выполнится
команда сравнения двух элементов массива.

Пример входного файла
5
3 1 2 4 2

Пример выходного файла
10

Текст программы p141.pas

const nmax=100;

var a:array[1..nmax] of integer;
    n:integer;
    i,j,g:integer;

    f1,f2:text;

begin
assign(f1,'input.txt');
reset(f1);
assign(f2,'output.txt');
rewrite(f2);
                                  {Чтение входных данных}
read(f1,n);
for i:=1 to n do read(f1,a[i]);
                                  {Сортировка массива}

for i:=1 to n do begin            {Подбираем число на i-ое место}

  g:=i;                           {Считаем, что самое маленькое число,
                                   которое нам встретилось, стоит на месте i}

  for j:=i+1 to n do              {Перебираем все числа с i+1 до конца массива}
    if a[j]<a[g] then g:=j;       {Если нашли число, которое меньше,
                                   чем то, что уже найдено, запоминаем его}

                                  {Меняем местами числа, стоящие на i-ом и
                                   на g-ом местах }
                                  {Если a[i]=x, a[g]=y, то после выполнения
                                   команды: }
  if i<>g then begin
    a[i]:=a[i]+a[g];                {a[i]=x+y, a[g]=y}
    a[g]:=a[i]-a[g];                {a[i]=x+y, a[g]=(x+y)-y=x}
    a[i]:=a[i]-a[g];                {a[i]=(x+y)-x=y}
                                  {То есть после этого a[i]=y, a[g]=x
                                   обмен значений произошел}
    end;

  end;

                                  {Выводим результат}
for i:=1 to n do
  write(f2,a[i],' ');
close(f1);
close(f2);
end.

Вниз   Решение


В ряд записаны 20 различных натуральных чисел. Произведение каждых двух из них, стоящих подряд, является квадратом натурального числа. Первое число равно 42. Докажите, что хотя бы одно из чисел больше чем 16000.

Вверх   Решение

Задачи

Страница: << 1 2 3 [Всего задач: 12]      



Задача 108160  (#8.4.2)

Темы:   [ Признаки и свойства параллелограмма ]
[ Симметрия помогает решить задачу ]
[ Средняя линия треугольника ]
Сложность: 3+
Классы: 8,9

На стороне AB параллелограмма ABCD (или на её продолжении) взята точка M, для которой  ∠MAD = ∠AMO,  где O – точка пересечения диагоналей параллелограмма. Докажите, что  MD = MC.

Прислать комментарий     Решение

Задача 65001  (#8.4.3)

Темы:   [ Числовые последовательности (прочее) ]
[ Основная теорема арифметики. Разложение на простые сомножители ]
[ Принцип крайнего (прочее) ]
Сложность: 3+
Классы: 7,8,9

В ряд записаны 20 различных натуральных чисел. Произведение каждых двух из них, стоящих подряд, является квадратом натурального числа. Первое число равно 42. Докажите, что хотя бы одно из чисел больше чем 16000.

Прислать комментарий     Решение

Страница: << 1 2 3 [Всего задач: 12]      



© 2004-... МЦНМО (о копирайте)
Пишите нам

Проект осуществляется при поддержке Департамента образования г.Москвы и ФЦП "Кадры" .