Срочно!!! Pascal ABC Задача 1.В командных олимпиадах по программированию для решения...

0 голосов
126 просмотров

Срочно!!! Pascal ABC Задача 1.В командных олимпиадах по программированию для решения предлагается не более 12 задач. Команда может решать предложенные задачи в любом порядке. Подготовленные решения команда посылает в единую проверяющую систему соревнований. Написать программу, которая будет статистически обрабатывать пришедшие запросы на проверку, чтобы определить популярность той или иной задачи. На вход программе в первой строчке подается количество пришедших запросов N. В каждой из последующих N строк записан номер задачи от 1 до 12. Пример входных данных: 6 1 2 1 1 5 2 Программа должна вывести список всех задач, встречающихся в запросах, в порядке возрастания (неубывания) количества запросов по ней с указанием этого количества запросов. Каждая задача должна быть выведена только один раз. Пример выходных данных для приведенных входных данных: 5 1 (пятая задача встречается один раз) 2 2 (вторая задача встречается два раза) 1 3 (первая задача встречается три раза) Примечания: •В примере входных данных кроме задач №1, 2, 5 других номеров не было, т.е. их количество равно 0, но в выходных данных оно не выводится. •Нужно вспомнить способы сортировки массива и применть один из них. Для решения следующей задачи нужно работать с вложенными циклами Например, For i:=1 to n do For j:=1 to n do обрабатываем пары элементов a[i] и a[j]; НО! Нужно помнить, что если цикл записан в таком виде, как выше, то •при i=1 и j=1 будет рассматриваться не пара элементов, а один и тот же первый элемент. •или, например, когда i=3, a j=4, то рассматривается пара, состоящая из третьего и четвертого элемента, но когда i=4, a j=3, то рассматривается та же самая пара из третьего и четвертого элементов. И если она подходит по условию, то будет посчитана два раза. Поэтому циклы используем вложенные, но не в том виде, в котором они записаны выше, а смотрим по задаче, какими должны быть начальные и конечные значения для параметров i и j.


Информатика (18 баллов) | 126 просмотров
Дан 1 ответ
0 голосов

Ответ:

var

 n, Num, i, j, t: integer;  

 Count: array[1..12] of integer;  

 Names: array[1..12] of integer;

begin

 for i := 1 to 12 do  

 begin

   Count[i] := 0;  

   Names[i] := i;  

 end;  

 ReadLn(N); { Считываем количество запросов}  

 for i := 1 to N do  

 begin

   ReadLn(t); {считали очередной запрос}  

   Count[t] := Count[t] + 1;  

 end;  

 {Сортируем массивы Names и Count в порядке убывания значений массива Count}  

 for i := 12 downto 2 do  

   for j := 2 to i do  

     if Count[j - 1] < Count[j] then  

     begin

       t := Count[j];

       Count[j] := Count[j - 1];

       Count[j - 1] := t;

       t := Names[j];

       Names[j] := Names[j - 1];

       Names[j - 1] := t;

     end;  

 for i := 12 downto 1 do  

   if Count[i] > 0 then  

     WriteLn(Names[i], ' ', Count[i]);  

end.

Объяснение:

(72 баллов)