В телевизионном танцевальном марафоне с определением победителя с
Условие
В телевизионном танцевальном марафоне с определением победителя с помощью телезрителей после каждого тура объявляется sms-голосование, в котором зрители указывают наиболее понравившуюся им пару из максимум 10 пар, которые участвуют в проекте. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет обрабатывать результаты sms-голосования по данному вопросу. Результаты голосования получены в виде номеров пар (каждый элемент списка соответствует одному sms-сообщению). Следует учитывать, что количество голосов в списке может быть очень велико. Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи. На вход программе в первой строке подаётся количество пришедших sms-сообщений N. В каждой из последующих N строк записан номер пары от 1 до 10.Пример входных данных: 421032 Программа должна вывести список всех пар, встречающихся в списке, в порядке возрастания (неубывания) количества голосов, отданных за ту или иную пару, с указанием количества отданных за неё голосов. При этом каждая пара должна быть выведена ровно один раз вне зависимости от того, сколько раз она встречается в списке.Пример выходных данных для приведённого выше примера входных данных: 3 110 12 2 Критерии оценивания выполнения задания | Баллы | Программа работает для любых входных данных произвольного размера и находит ответ, не сохраняя входные данные в массиве, размер которого соответствует числу N (количеству запросов). Программа просматривает входные данные один раз, сохраняя в массиве размером 12 данные о количестве запросов, поданных на каждую из встретившихся в списке задач (и учитывает, что в списке их может быть и меньше 12). Допускается наличие в тексте программы трёх синтаксических ошибок: пропущен или неверно указан знак пунктуации; неверно написано или пропущено зарезервированное слово языка программирования; не описана или неверно описана переменная; применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку) | 4 | Программа работает верно, но входные данные запоминаются в массиве, размер которого соответствует числу N. Этот массив,возможно, потом сортируется. Допускается наличие до пяти синтаксических ошибок, описанных выше. Возможно, впринципиально верно организованном вводе данных есть однаошибка (например, использование read вместо readln в Паскале илиневерное считывание строки в C++). 3 балла также выставляется,если в эффективной программе, удовлетворяющей критериямвыставления 4 баллов, есть одна ошибка, в результате которойпрограмма работает неверно на некоторых наборах нетипичныхвходных данных (например, все запросы относятся к одной и той же задаче) | 3 | Программа работает в целом верно, эффективно или нет, но в реализации алгоритма содержится до двух ошибок (неверная инициализация счётчиков, хотя в предложенных выше решениях обнулять их не требуется. Возможно, программа работает неверно, если в списке упомянуто меньше 12 задач, выход за границу массива, допущена ошибка в принципиально верно организованной сортировке или алгоритме поиска минимальных элементов, используется знак “<” вместо “<=”, “or” вместо “and” и т.п.). Возможно, некорректно организовано считывание входных данных. Допускается наличие до семи синтаксических ошибок, описанных выше | 2 | Программа, возможно, работает неверно при некоторых входных данных, но по приведённому тексту решения ясно, что экзаменуемый понимает, из каких этапов должно состоять решение задачи. При использовании сортировки она может быть реализована принципиально неверно (например, вместо двух циклов используется один), или допущена принципиальная ошибка в поиске трёх наименее популярных элементов. Всего допускается до четырёх различных ошибок в реализации алгоритма, в том числе описанных в критериях присвоения 2 баллов. Допускается наличие любого количества синтаксических ошибок, описанных выше | 1 | Задание не выполнено или выполнено неверно | 0 | Максимальный балл | 4 |
Формат задания
Решение по шагам
Как рассуждать
Решение. Программа читает все входные данные один раз, не запоминая все входные данные в массиве, размер которого равен N, а сразу подсчитывая в массиве пар, сколько голосов отдано за каждую из них. После окончания ввода производится одновременная сортировка массивов номеров пар и количества голосов, отданных за них, в порядке возрастания количества голосов; затем выводится список пар, за которые подано ненулевое число голосов, с указанием частоты встречаемости. Баллы начисляются только за программу, которая решает задачу хотя бы для одного частного случая. Ниже приведены примеры решения задания на языках Паскаль и Бейсик. Допускаются решения, записанные на других языках программирования. При оценивании решений на других языках программирования необходимо учитывать особенности этих языков программирования.Пример правильной и эффективной программы на языке Паскаль: | Пример правильной и эффективной программы на языке Бейсик: | Var n, i, j, t: integer; Count, Names: array[1..10] of integer; Begin For i := 1 to 10 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:=10 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:=1 to 10 do if Count[i] > 0 then writeLn(Names[i], ' ', Count[i]); end. | DIM Count(10) AS INTEGER DIM Names(10) AS INTEGER FOR i = 1 TO 10 Count(i) = 0 Names(i) = i NEXT i INPUT N 'Считываем количество голосов FOR i = 1 TO N INPUT t 'считали пару 'Учитываем поданный голос Count(t) = Count(t) + 1 NEXT i 'Сортируем массивы Names и Count в порядке возрастания 'значений массива Count FOR i = 10 TO 2 STEP -1 FOR j = 2 TO i IF Count(j -
Осталось ещё 3 шага
Шаг 2
Шаг 3
Шаг 4
Бесплатно · займёт минуту