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

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

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

Дана программа сортировки (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.

   Решение

Задачи

Страница: << 2 3 4 5 6 7 8 >> [Всего задач: 277]      



Задача 64160

Тема:   [ Сортировка ]
Сложность: 2
Классы: 8

Большая сортировка

Дано число N (1<=N<=100000), а затем N натуральных чисел из диапазона
от 1 до 100.

Выведите N чисел в неубывающем порядке

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

Пример выходного файла
1 2 2 3 4
Прислать комментарий     Решение

Задача 64161

Тема:   [ Сортировка ]
Сложность: 2
Классы: 8

Вам дана программа, решающая 136 задачу (p139.pas).
Требуется найти в ней ошибку, и объяснить (письменно
или устно), почему так происходит.

Текст программы p139.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, то после выполнения
                                   команды: }
  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;

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

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

Задача 64162

Тема:   [ Сортировка ]
Сложность: 2
Классы: 8

Результаты олимпиады

N участников олимпиады получили уникальные номера от 1 до N.
В результате решения задач на олимпиаде каждый участник получил
некоторое количество баллов (целое число от 0 до 600).
Известно, кто сколько баллов набрал.
Требуется перечислить участников олимпиады в порядке невозрастания
набранных ими баллов.

Входные данные.
Вводится сначала число N (1<=N<=100) - количество участников олимпиады.
Далее вводится N чисел - количества набранных участниками баллов (1-е число -
это баллы, набранные участником номер 1, 2-е - участником номер 2 и т.д.)

Выходные данные.
Выведите в выходной файл N чисел - номера участников в порядке невозрастания
набранных ими баллов (участники, набравшие одинаковое количество баллов
могут быть выведены в любом порядке).

Пример входного файла
5
100 312 0 312 500

Пример выходного файла
5 2 4 1 3
Прислать комментарий     Решение

Задача 64163

Тема:   [ Сортировка ]
Сложность: 2
Классы: 8

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

Дана программа сортировки (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.

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

Задача 64165

Тема:   [ Одномерные массивы ]
Сложность: 2
Классы: 8

ГАИ

Вдоль шоссе в точках X1,X2,...,XN расположены посты ГАИ.
В точке X произошло мелкое ДТП (дорожно-транспортное происшествие).
Требуется определить, какой из постов ГАИ расположен ближе всего
к этой точке, чтобы с него послать к месту происшествия наряд милиции.

Входные данные
Во входном файле записано сначала число N - количество пунктов ГАИ. (1<=N<=100)
Далее следуют координаты расположения постов ГАИ на прямом шоссе
(целые числа от -10000 до 10000). Далее идет координата точки,
в которой произошло ДТМ (целое число от -10000 до 10000).

Выходные данные
В выходной файл требуется вывести одно число - номер поста ГАИ,
с которого нужно послать наряд к месту ДТП. Если несколько постов
ГАИ находятся на одинаковом расстоянии от точки ДТП, выведите любой из них.

Пример входного файла
5
10 2 8 -7 3
7

Пример выходного файла
3
Прислать комментарий     Решение

Страница: << 2 3 4 5 6 7 8 >> [Всего задач: 277]      



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

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