О способах развития логического мышления при решении олимпиадных задач по программированию

NovaInfo 74, с.334-337, скачать PDF
Опубликовано
Раздел: Педагогические науки
Просмотров за месяц: 1

Аннотация

В работе рассматривается влияние решения олимпиадных задач на процесс формирования логического мышления на примере разбора олимпиадной задачи по программированию. В работе приводится текст олимпиадной задачи, рассматриваются способы решения задачи, в том числе каким образом оптимизировать решение.

Ключевые слова

В настоящее время всё больше становится популярным изучение языков программирования. Существует мнение, что чем раньше учить человека какому-то, пусть даже самому простому языку программирования, его мышлении станет более последовательным и ясным, а склонность к аналитике повысится[1,2]. Так, например, согласно последним стандартам обучения, самые простые задачки программирования начинают решать уже с начальной школы, а начиная с 6 класса ученики приобщаются к программированию. Для этого используется программа "Кумир" и графический исполнитель "Чертёжник".

Итак, рассмотрим достаточно простую задачу, которая была представлена на региональной олимпиаде по программированию, и проведем анализ, как бы построить решение задачи.

Условие задачи:

"В городе Стерлитамак разрабатывается и развивается платформа Электронной игровой школы (https://eplayschool.ru). Пятиклассник Петя любит получать новые знания по математике и информатике, проходя уроки на платформе, а в свободное время он очень любит изучать числа и их свойства. Сейчас он увлёкся поиском «удивительных» чисел. Рассматривается натуральное число а из диапазона [10, 99]. Число c получается путём умножения числа a на некоторое натуральное число. Рассматриваются только трёхзначные натуральные числа c. Петя заметил, что в некоторых случаях, если в записи числа с зачеркнуть первую цифру и записать её в конец, то полученное число также будет нацело делиться на число a. Если это действие можно применить для числа дважды, то такие числа Петя называет «удивительными». Если в записи числа используется только одна цифра, то такое число не подходит. Петя решил найти сумму всех удивительных чисел с для чисел a из заданного диапазона. В результате он хочет найти цифру, которая соответствует сумме «удивительных» чисел.

Примечание. Цифра, которая должна быть найдена в результате, вычисляется следующим образом: например, если сумма «удивительных» чисел равняется 6452, то суммируем цифры числа 6+4+5+2=17. Если в результате получилась цифра, то можно записать её в ответ, иначе повторяем предыдущее действие. Для нашего примера суммируем цифры получившегося числа повторно 1+7=8."

Итак, во-первых, как и любая другая задача олимпиадного типа, задача немного запутанная и требует некоторых пояснений. Для начала необходимо выяснить, какие числа могут быть названы "удивительными". Согласно условию: "Рассматривается натуральное число а из диапазона [10, 99]. Число c получается путём умножения числа a на некоторое натуральное число. Рассматриваются только трёхзначные натуральные числа c. Петя заметил, что в некоторых случаях, если в записи числа с зачеркнуть первую цифру и записать её в конец, то полученное число также будет нацело делиться на число a. Если это действие можно применить для числа дважды, то такие числа Петя называет «удивительными».". Т.е. нам необходимо начать перебирать все числа от 10 до 99, чтобы проверить, какие же числа нам подходят. Итак, берем первое число 10 и последовательно умножаем его на все натуральные числа. Следует отметить, что условие относительно того, что результат должен получиться трехзначным (только такие числа рассматриваются) наводит на мысль, что совсем не обязательно перебирать натуральные числа от 1 до бесконечности. Так для первого числа будут подходить натуральные числа от 10 до 99. Теперь нужно рассмотреть полученное число.

10*10=100.

Зачеркнем первую цифру и запишем её в конец. Получится 001 или просто 1. Это число не является трехзначным, а, следовательно, не подходит и рассматриваться не будет. Очевидно, что первое число из диапазона всегда будет давать трёхзначное число, содержащее 0. Такие числа нам подходить не будут, поэтому число 10 можем не рассматривать дальше. При рассмотрении чисел, подозрительных на "удивительность", можно сразу исключить те из них, которые содержат 0. Это исключение позволит уменьшить число проверок и увеличить скорость работы программы.

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

Например,

18*16=288.

Преобразуем полученное число, зачеркнув цифру 2, и записав её в конец. Получим число 882. Данное число делится нацело на 18, т.е.

882:18=49.

Повторим преобразование, получим число 828. Оно также делится на 18:

828:18=46.

Таким образом, число 288 подходит и является "удивительным".

В зависимости от алгоритма можно либо сразу определить числа 882 и 828 как "удивительные", либо выявить их при переборе множителей числа 18.

Поиск чисел, которые могут искать "удивительные" числа можно организовать следующим образом. Первый (внешний) цикл будет проходить по числам a из диапазона от 10 до 99. Второй (внутренний) цикл будет бежать по натуральным числам, которые могут при умножении на число a давать трехзначное число. Если для первого цикла корректнее всего использовать цикл-счётчик (for), то для второго будет рациональнее использовать цикл с предусловием (while).

Помимо этого в условии сказано, что: "Если в записи числа используется только одна цифра, то такое число не подходит.". Поэтому необходимо добавить дополнительное условие, которое будет проверять, одна ли цифра использовалась при записи числа. Для этого достаточно проверить на равенство цифры удивительного числа, что можно сделать всего в одном условии.

Следует отметить, что все числа, которые соответствуют условию "удивительного" числа следует сразу суммировать в некоторую переменную, например, в s. После завершения прохода цикла по числам необходимо найти сумму цифр полученного числа. Для этого достаточно запустить цикл, который будет отделять из полученного числа цифру, и суммировать её. Результат можно записать снова в s. А суммирование производить до тех пор, пока результат не станет меньше 10.

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

Читайте также

Список литературы

  1. Файн Я. Программирование на Java для детей, родителей, дедушек и бабушек. - 2011. - 231 с.
  2. Симонович С., Евсеев Г. Занимательное программирование: Visual Basic. Книга для детей, родителей и учителей. - 2001. - 300 с.

Цитировать

Кильдибаева, С.Р. О способах развития логического мышления при решении олимпиадных задач по программированию / С.Р. Кильдибаева. — Текст : электронный // NovaInfo, 2017. — № 74 — С. 334-337 — URL: https://novainfo.ru/article/14255 (дата обращения: 16.07.2024).

Поделиться