Квант
Олимпиады

Заочная олимпиада по программированию

26

Заочная олимпида по программированию

17 февраля 1985 года Учебно-производственный центр вычислительной техники Октябрьского района Москвы и институты Электронных управляемых машин Минипибора СССР и Проблем информационных (шестую) Московскую городскую олимпиду по программированию для школьников, в котором участвовали около 200 человек.

Журнал «Квант» предлагает всем школьникам и учащимся ПТУ, умEOЩИМ программировать (кроме Москвы), задачи этой олимпиды в качестве задания Заочной олимпиды по программированию. Решения отправляйте не позднее 1 августа (по почтовомуITEMПЕЛЮ) на адрес «Кванта», написав на конверте: «Олимпида по программированию». Присланьные решения будут оценяться жюри под председательством доктора физиокатематических наук А. Л. Брудно. Все участникам будут присланы отзываны об их работах. Победители получат Дипломы журнала «Квант».

Имейте в виду, что описки снижают оценку решения. Снижают оценку и алгоритмы с излишим числом действия или массивами, без которых можно обойтись. Хорошие алгоритмы и экономно написанные программы оценку повышают. В каждой работе зачитываются только 3 задачи с более удачными решениями.

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

Задачи

  1. Разложение на слагаемые. Напечать все способы представления натурального числа nn суммой натуральных чисел. Перестановка слагаемых новым способом не считается.

  2. Равные элементы. Задан массив чисел P[1:m,1:n]P[1:m, 1:n]. Каждая строка массива упорядочена по возрастанию. Найти и отпечать число, встречающееся во всех строках, и надпись NET, если такого числа не оказывается.

  3. Несоставляемое число. Задан массив натуральных чисел M[1:n]M[1:n]. Найти и отпечать минимальное натуральное число, не представное суммой элементов массива MM. Сумма может состоять и из одного слагаемого, но каждый элемент массива может входить в нее только один раз.

  4. Тетраэды. На гранах двух равных правых tetraэдров MM и NN написаны числа M1,M2,M3,M4M1, M2, M3, M4 на одном, и N1,N2,N3,N4N1, N2, N3, N4 на другом (в том же порядке). Можно ли совместить tetraэдры так, чтобы на совпавших гранах оказались написаны одинаковые числа? Напечать DA или NET.

  5. Самое частое число. В массиве чисел M[1:n]M[1:n] найти число, повторяющее максимальное количество раз. Если их несколько, то одно из них.

  6. Системы числения. В целочисленном массиве M[1:9]M[1:9] записаны разряды (цифры) некоторого натурального числа в ii-ричной системе числения (M[1]M[1] — разряд единиц и т. д.). Отпечать разряд этого числа в jj-ричной системе числения. Числа ii и jj не более числа десять.

  7. Воковая диагональ. Найти сумму элементов A[i,j]A[i, j] массива A[1:m,1:n]A[1:m, 1:n], имеющих заданную разность индексов i−j=ki-j=k. Число kk — целое, но не обязательно положительное.


Пояснение. Здесь массив P[1:m,1:n]P[1:m, 1:n] обозначает массив чисел PijP_{ij} для i=1,2,...,mi=1, 2, ..., m и j=1,2,...,nj=1, 2, ..., n, а запись P[i,j]P[i, j] обозначает элемент PijP_{ij}. Если сказано, что массив P[1:m,1:n]P[1:m, 1:n] задан, то значит заданный числа m,nm, n и значения элементов массива. Аналогичный смысл имеются и задания других массивов.

В программах (решения) ученики вводят извлеканые значения и печатают их. Неокоторые оформляют решения в виде подпрограммы (в алгорите — procedure, в фортера — subroutine и т. д.). В тех языках, где размер массивов нужно задать числа (как на фортера), ученики их выбирают произвольно.

«Хорошие решения» должны укладывать (с точностью до постоянного множителя) в следующие колчества: m⋅nm \cdot n (задача 2), n2n^2 или n⋅log⁡nn \cdot \log n (задачи 3 и 5), min {m,nm, n} (задача 7), считая nn и mm большими числами.