Статья Автор: Лебедев Дмитрий

Разбор Статграда от 2024-12-17. Часть 5( 9, 17, 18)

Все задания этого блока используют данные из файлов. В заданиях 9 и 18 используются файлы формата электронных таблиц.
Эти файлы открываются, данные выделяются, копируются в блокнот и сохраняются в текстовом формате.
Считается, что эта работа проделана предварительно. К тетради приложены текстовые вариантов файлов. 
Считывание данных из файла (для всех заданий) будем осуществлять с помощью функции fread (модифицируя её под задание)

Задание 9
В каждой строке электронной таблицы записаны шесть натуральных чисел.
Назовём ячейку таблицы интересной, если для числа в ней одновременно выполнены все следующие условия:
– это число не встречается в других ячейках той же строки;
– это число встречается не менее 330 раз в других ячейках того же столбца;
– это число больше среднего арифметического всех чисел строки, в которой оно находится (с учётом самого числа).
Определите, сколько в таблице строк, содержащих ровно одну интересную ячейку.
Необычность формулировки в том, что кроме данных строки надо использовать данные о столбце
Для упрощения решения сделаем следующее:
  1. Данные будем считывать функцией. В процессе считывания строку данных запишем в "словарь строк",
    а элементы строк добавим к соответствующим значениям (спискам) "словарей столбцов"
  2. Далее обрабатываем строки и определяем "требуемые" 
Файл к заданию содержит 30000 строк и его обработка "простым" способом требует более 10 сек,
поэтому в решении обрабатывается только 5000 первых строк
Выводиться статистика по всем возможным количествам интересных ячеек (используем принцип "полезного вывода")


Представленного решения достаточно, но попробуем "загнать" решение в 10 секунд.
Что сделано "плохо"? Нет предварительной обработки столбцов !!! cool Надо оставить только те значения, которые входят более M=330 раз.
Добавим функцию, которая это реализует  и получим полное решение менее чем за одну секунду.
Надо ли это делать на экзамене? Скорее всего не надо (большие затраты и увеличение вероятности ошибки), но понимать как это можно сделать нужно. Рекомендуется на тренировках повышать эффективность решений.


Задание 17

Файл содержит последовательность натуральных чисел, не превышающих 100 000.
Назовём тройкой три идущих подряд элемента последовательности.
Определите количество троек, для которых выполняются следующие условия:

– остаток от деления на 3 ровно одного числа из тройки равен
   остатку от деления на 3 минимального элемента всей последовательности;
– остаток от деления на 7 хотя бы двух чисел из тройки равен
   остатку от деления на 7 максимального  элемента всей последовательности.

Задание стандартное. Попробуем написать решение в обобщенном виде (применимое для пар, четверок и т.д.) Чтение из файла выделим в функции (для общности и, возможно, более сложной обработки).  
                      Текст программы пишем "размашисто" (для возможной отладки печатью)



Задание 18
Робот стоит в левом верхнем углу прямоугольного поля, в каждой клетке которого записано целое число, обозначающее выраженную в условных единицах высоту местности в данной клетке. За один ход робот может переместиться на одну клетку вправо или на одну клетку вниз, но только при условии, что при этом переходе он поднимается или опускается не более чем на 50 условных единиц.
Задание 1. Определите количество различных маршрутов из исходной точки в правый нижний угол поля.
Задание 2. Определите количество клеток поля, недоступных для робота из- за ограничения на допустимый перепад высот.
Новая постановка задания - отсутствуют стенки, новая формулировака задания.  
Задание будем выполнять с помощью программы. Для этого файл скопировали в блокнот и сохранили в текстовом формате.
Далее будем придерживаться следующего плана:
  1.  Данные считываем функцией и заносим в словарь, где ключ - координаты ячейки, значение - кортеж вида (содержимое ячейки, количество путей /инициализация нулём)
     Функция возвращает размеры таблицы
  2. Меняем количество путей для стартовой ячейки ( (0,0) ) меняем на 1 
  3. Обходим таблицу (в зависимости от команд) и вычисляем количество путей. Если ячейка недостижима, то добавляем координаты ячейки в множество недостижимых.
     

Прикрепленные файлы
09_24-12.txt
17_24-12.txt
18_24-12.txt
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать