Размер шрифта: A AA Изображения Выключить Включить Цвет сайта Ц Ц Ц Х
Бесплатный конструктор сайтов - uCoz
Четверг, 02.05.2024, 05:48
Приветствую Вас Гость | RSS

Сайт учителя информатики  и ИКТ Шинкаренко Евгения Александровича

Реклама
Оцените сайт
Оцените мой сайт
Всего ответов: 837
Программирование
Какой язык программирования выбрать для подготовки к ЕГЭ
Всего ответов: 804

Решение задачи №10.

Задача №10.
На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат: <Фамилия> <Инициалы> <номер школы>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> – строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> – не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки:
Иванов П.С. 57
Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран информацию, из какой школы было меньше всего участников (таких школ может быть несколько). При этом необходимо вывести информацию только по школам, пославшим хотя бы одного участника.
Следует учитывать, что N>=1000.

Решение задачи №10.
var
a:array [1..99] of integer;  {целочисленный массив с индексами от 1 до 99, будет содержать число учеников от каждой школы}
c:char;  {символьная переменная поможет нам считать фамилии и инициалы учеников}
shol:1..99;  {переменная shol будет принимать значение номера школа (от 1 до 99)}
n,i,min:integer;  {целочисленные переменные n - количество учеников, i - счетчик, min - минимальное количество учеников от школы}
begin

for i:=1 to 99 do  {задаем цикл для обнуления массива}
a[i]:=0;  {все элементы массива равны 0}
readln (n);  {считываем количество учеников в нашем списке}
for i:=1 to n do  {цикл для считывания данных по каждому ученику}
begin
repeat   {считываем символы до точки}
read (c);
until c='.';
repeat  
{считываем символы до точки}
read (c);
until c='.';  {мы считали фамилию и инициалы каждого ученика}
read (shol);  {считали номер школы}
a[shol]:=a[shol]+1;  {элементы массива с индексом shol будет увеличивать свое значение на 1, таким образом массив будет содержать количество учеников от каждой школы}
end;
min:=n;  {переменная min принимает значение количества всех учеников в списке}
for i:=1 to 99 do  {задаем цикл для определения минимального количества школьников из из определенной школы}
if (a[i]>0)and(a[i]<min) then min:=a[i];  {проверяем, если элемент массива больше нуля и меньше min значение переменной минимум принимает значение элемента массива, мы нашли минимальный элемент массива}
for i:=1 to 99 do  {в данном цикле выводим элементы массива равные минимальному элементу массива}
if a[i]=min then writeln(i);  {если элемент массива равен минимальному элементу массива, то выводим на экран индекс элемента массива (номер школы)}
end.


Алгоритм решения задачи
  • В данной задаче нам не важны фамилия и инициалы учеников, важно сколько учеников от каждой школы, для подсчета количества учеников вводим целочисленный массив массив
  • Считываем фамилию и инициалы, и забываем про них, затем считываем номер школы, и элемент массива с индексом номера школы увеличивает свое значение на 1, считаем сколько учеников от каждой школы
  • Затем нам необходимо найти минимальный элемент массива не равный нулю
  • В конце выводим все элементы массива равные минимальным элементам массива, мы находим школы из которых меньше всего учеников
Возврат к списку задач
Реклама
Календарь
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Счетчик яндекс
Яндекс.Метрика