Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль / okulov / okulov / chapter4.DOC
Скачиваний:
50
Добавлен:
10.12.2013
Размер:
2.38 Mб
Скачать
  • M, L, K - натуральные числа(M, L£10000, K£6);

  • лодка сама по себе переправляться через реку не может;

  • любой представитель племени способен перегнать лодку с одного берега на другой.

    Входные данные - значения M, L, K.

    Выходные данные - число перегонов лодки (P).

    Пример:

    Ввод

    (M, L, K) - 3 3 2.

    Ответ - 11.

    (3, 3, 1) ®(2, 2, 0)®(3, 2, 1)®(3, 0, 0)®(3, 1, 1)®(1, 1, 0)®(2, 2, 1)®(0, 2, 0)®(0, 3, 1)®(0, 1, 0)®(1, 1, 1)®(0, 0, 0)

    Примечания:

  • третье число в примере - признак “где лодка”;

  • первые два числа в примере означают число миссионеров и людоедов на исходном берегу;

  • вывод способа переправы при значениях M и L меньших 10 оценивается дополнительными баллами.

    4.8. Олимпиада - 96

    r96_1 Переставить две части массива А из n элементов, первая часть - элементы с номерами от 1 до m, вторая - от m+1 до n. При этом порядок элементов в каждой из частей должен быть сохранен и нельзя использовать дополнительные массивы.

    Пример. n=9, m=5

    Вход: 9 4 7 2 3 5 8 1 6 Выход: 5 8 1 6 9 4 7 2 3

    r96_2 Для надежности некоторый текст был передан по линии связи трижды, но каждый раз ровно один символ был принят в искаженном виде. Требуется по трем полученным текстам восстановить исходный текст или установить, что сделать это невозможно.

    r96_3 Дан массив N*M, в клетках которого произвольным образом поставлены числа от 1 до N*M. Горизонтальным ходом называется такая перестановка любого числа элементов массива, при которой каждый элемент остается в той строке, в которой он был. Вертикальным ходом называется такая перестановка любого числа элементов массива, при которой каждый элемент остается в том столбце, в котором он был. Разрешаются только горизонтальные и вертикальные ходы.

    Разработать программу, которая за возможно меньшее количество ходов расставляет элементы массива по порядку, т.е. в первой строке - от 1 до M, во второй строке - от M+1 до 2M, и т. д.

    Примечание. Программа должна выводить массив до каждого хода и после хода.

    r96_4 В городе прямоугольной формы, расположенном в холмистой местности, все улицы идут либо с юга на север (N улиц), либо с востока на запад (M улиц), так что все кварталы являются квадратами со стороной 1. Каждый из участков улиц между соседними перекрестками имеет либо только спуск, либо только подъем, либо горизонтален. Матрица А[i,j] (i=1..M, j=1..N) определяет высоту перекрестков над уровнем моря.

    Разработать программу, которая:

  • запрашивает размерность матрицы (числа M и N):

  • вводит элементы матрицы А и координаты двух перекрестков X и Y:

  • определяет, можно ли спуститься из X в Y или из Y в X, непрерывно двигаясь под уклон, и если ответ положительный, то находит маршрут, состоящий из минимального числа кварталов.

    о96_1Напишите программу, которая ищет и выводит на экран все решения числового ребуса ДВА*ДВА = ЧИСЛО.

    Здесь, как обычно, одинаковым буквам соответствуют одинаковые цифры, разным - разные, а первая цифра числа не может быть нулем.

    о96_2Рассмотрим точки на бесконечной сетке из равносторонних треугольников, показанной ниже:

Пронумеруем отмеченные точки слева направо и сверху вниз. Заметим, что некоторые группы этих точек являются вершинами определенных геометрических фигур. Например, множества точек {1,2,3} и {7,9,18} являются вершинами треугольников, множества {11,13,26,24} и {2,7,9,17} - вершинами параллелограммов, а множества {45,9,13,12,7} и {8,10,17,21,23,32,34} - вершинами шестиугольников.

Задание. Напишите программу, которая вводит с клавиатуры множество точек этой треугольной сетки, анализирует его и определяет, являются ли эти точки вершинами одной из следующих фигур: "правильного" треугольника, "правильного" параллелограмма или "правильного" шестиугольника. Многоугольник называется "правильным", если все его стороны идут по ребрам треугольной сетки и имеют равную длину. Предусмотрите возможность многократного тестирования Вашей программы.

Возможен следующий диалог с Вашей программой:

Число точек: 3

Номера: 1 2 3

Это вершины правильного треугольника.

Число точек: 4

Номера: 11 13 29 31

Эти точки не являются вершинами никакой правильной фигуры.

Число точек: 4

Номера: 26 11 13 24

Эти вершины правильного параллелограмма.

Примечание. Число точек в множестве не будет превышать шести, номера всех точек принадлежат диапазону {1, 32767}

о96_3 2N-значное число называется “счастливым”, если сумма его первых N цифр равняется сумме последних N цифр. Напишите программу, которая определяет количество 2N-значных (N£10) “счастливых” чисел в диапазоне [A,B], где A и B - заданные натуральные числа, имеющие в десятичной записи не более двадцати цифр. Учтите, что “счастливое” число может начинаться и с нуля.

Пример работы программы:

Введите N: 3

Введите A: 1

Введите B: 999999

Число счастливых чисел: 55251

о96_4Существуют натуральные числа, оканчивающиеся на цифру N, такие, что перенесение цифры N в начало числа приводит к увеличению числа в N раз. Например, число 102564, N=4, 410256=102564*4.

Найдите наименьшие натуральные числа, удовлетворяющие заданному условию при N=2, 3, 5, 6, 7, 8, 9.

о96_5Штриховой код предназначен для автоматизации учета продажи товаров. При считывании кода светочувствительный элемент движется вдоль штриховой полоски, причем результат считывания не зависит от направления движения. Ниже приведены коды трех всем известных лакомств с расшифровками и два кода без расшифровок. Расшифруйте их.

Напишите программу, расшифровывающую произвольный штриховой код, введенный с клавиатуры. Штриховой код вводится в виде строки, состоящей из цифр от 1 до 4, соответствующих толщине линий. Например, код "Мilky Way" можно ввести в виде строки 1111132321122212221111112221141131122221111 (слева направо) или 1111222211311411222111111222122211232311111 (справа налево). В обоих случаях программа должна вывести на экран строку 40111391.

о96_6Круг разбили на 8 секторов. Какие-то два соседних сектора пусты, а в остальных расположены буквы Р, О, С, С, И, Я в некотором порядке (по одной в секторе).

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

Состояние круга назовем правильным, если начиная с сектора 1 по ЧС можно прочесть слово "РОССИЯ". При этом местоположение пустых секторов может быть произвольным. Состояние круга можно закодировать строкой из 8 символов, получающихся при чтении круга по ЧС, начиная с сектора 1, если пустому сектору поставить в соответствие символ подчеркивания '_'. Эту строку из 8 символов будем называтькодом круга.

Пункт 1. Требуется ввести код и проверить его корректность. Если код некорректен, то необходимо выдать сообщение "Не корректно" и закончить работу. Если код корректен, то Ваша программа должна ввести с клавиатуры номер хода и произвести его, выдав код круга после этого хода на экран.

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

Ваша программа должна запрашивать номер тестируемого пункта (1 или 2). Будет оцениваться, совпадает ли формат ввода - вывода Вашей программы с нашими примерами.

Пример 1. Номер пункта:1 Введите код: ОЯ_ _ССИР Номер хода: 8 _Я РОССИ_

Пример 2. Номер пункта: 2 Введите код: ОЯ_ _ССИР _Я РОССИ_ Р_ _ОССИЯ

Примечание. Не выдавайте на экран никакой лишней информации и не подключайте модуль CRT. Время тестирования Вашей программы будет ограничено.

Соседние файлы в папке okulov