Сайт Льва Волкова
  
· Крысам свойственны патологическая тяга к блестящему и тяга к правильным геометрическим формам.
 
      На главную  
 Личное
  Статьи
  Задачи 
 Ссылки
 АТ-531
www.levvol.ru    
 

Опрос и его результаты

Радиокомпания провела опрос своих слушателей, которые должны назвать животное, связанное, на их взгляд, с их страной.

На вход программы в первой строке подается количество опрошенных N. В каждой из последующих N строк записано название животного, которое предпочел данный опрошенный, в виде текстовой строки. Длина строки не превосходит 50 символов. Название может содержать любые символы: буквы, цифры, пробелы и т.п.

Пример входных данных:

Волк
Медведь
Медведь
Россомаха
Медведь
Волк

Программа должна вывести список всех животных, встреччающихся в исходном списке, в порядке убывания числа голосов, отданных за это животное. При этом название каждого животного должно быть выведено ровно один раз, вне зависимости от того, сколько голосов было отдано за данное животное. Рядом с названием животного надо вывести число голосов, отданных за него.

Пример выходных данных для приведенного примера входных данных:

Медведь 3
Волк 2
Россомаха 1

При этом следует учитывать, что количество голосов в исходном списке может быть велико (свыше 1000), а количесчтво различных животных в этом списке не превосходит 10.

Решение

В условии есть явный намек, массивы в n элементов не требуются — слишком уж велик объем входных данных. Необходимы два массива в 10 элементов: строковый (anim) для хранения названий животных и целочисленный q (для хранения количества голосов, отданных за данное животное).

При вводе каждого нового названия животного при опросе возможны такие варианты: животное не встречается в массиве (anim), тогда это животное записывается в этот массив, а в массив q записывается 1. В другом случае название животного есть в массиве (anim). Тогда в массиве q соответствующий элемент увеличивается на 1.


Program TPT_14;
Uses CRT;
Var n,i,j,k,z,p :integer;
anim:array [1..10] of string[50];
anims:string[50];
b:boolean;
q:array [1..10] of integer;
Begin
readln(n); {ввод n}
k:=0;
{ввод названий животных}
for i:=1 to n do begin
readln(anims);
b:=false; {флажок}
{сначала k=0 и этот цикл не выполняется}
for j:=1 to k do {ищем введенное название в массиве}
if anims=anim[j] then begin
q[j]:=q[j]+1;
b:=true; {флажок}
end; {конец цикла поиска}
if not(b) then begin {если флажок b остался false}
k:=k+1; {увеличить k на 1}
anim[k]:=anims; {записать в массив название животного}
q[k]:=1 {посчитать в массиве количеств 1}
end;
end;
for i:=1 to k-1 do begin {сортировка массива q}
p:=i;
for j:=i+1 to k do
if q[j]>q[p] then k:=j;
z:=q[p]; q[p]:=q[i]; q[i]:=z;
anims:=anim[p]; anim[p]:=anim[i]; anim[i]:=anims;
end;
for i:=1 to k do writeln(anim[i]:50,' ',q[i]); {вывод отсортированных данных}
End.

Скачать эту программу

Назад