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

Разбор заданий с файлами

Задание 24  Файл fz_24_ds25.txt

Решим задание с помощью "двух указателей". Пусть задана строкак sss. Определим: 
  • x - указатель на начало слова/числа. Очевидно, что sss[x] in "123456789AB" (тривиальным случаем sss[x] = 0 принебрегаем)
  • y - указатель на следующий символ после окончания слова/числа. Очевидно, что sss[y] not in "0123456789AB" (теперь 0 нужен и длина слова/числа равна y - x)
Напишем макет программы, который будет искать максимальное (по длине) слово/число. Чтобы не было проблем, добавим к строке "барьер" в виде "паразитного символа" (типа "_")
 


Теперь осталось понять - а как определять чётность числа по его записи в P - ной системе счисления.
В общем случае есть признаки делимости вида:
  • по "последнимй цифрам" - делимость/остатки на делители числа P и их степени (для десятичной системы это на 2, 5, 4, 25 и т.д.)
  • по "сумме цифр разрядов записи" - делимость/остатки на делители чисел P-1 и P+1 (для десятичной системы это 9, 3, 11)
По условию нам нужна делимость на 2 в 12-ной системе счисления. Мы нашли 20-значное число "A3000001500860000061" и если его сократить на одну цифру, то все будет OK:
- у нас есть ответ в 19 и можно вывести все 20-значные числа и проверить их (так можно и возможно НУЖНО поступить на экзамене)
Для общности напишем подпрограмму, сокращающую слов/число до нужной цифры, добавим алфавит и введем переменные
   P - для основания системы счисления и q - числа кратности 


Ответ в задании всего 19 знаков, при максимальной длине числа в 20. Значит было возможно практически любой "силовой" способ решения.
Теперь посмотрим какие "усиления" могут предложить организаторы:
  • увеличение основания системы P
  • замена чётности на кратность/не кратность цифре  q - являющейся делетелем P:
    например кратность 7 в системе счисления с основанием 21
  • переход к "квадрату основания"
    например к кратности 9 в системе счисления с основанием 12
  • переход от правила "последних" цифр к правилам "признаки делимости" или их комбинации
    например, кратности 22 или 26 для 12-ричных чисел
Разберем случай чётности в 13-ричной системе счисления,  заодно освоим промежуточную печать итогов  
Алгоритм действует на основе правила - "в системе счисления с нечётным основание чётность числа совпадает с чётностью суммы цифр этого числа".
Значит если сумма цифр:
  • чётна, то число чётно
  • нечётна, то точно есть нечётная цифра и одну из них надо выкинуть 
    - можно "первую слева",
    - можно "первую справа" (удалив оставшиеся ведущие нули)

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