Вопрос Задача по информатике требуется написать программу на языке паскаль

g4H

Capitan
Регистрация
20 Июн 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
В витрине ювелирного магазина стоит манекен, на шею которого надето ожерелье. Оно состоит из N колечек, нанизанных на замкнутую нить. Все колечки имеют разные размеры. В зависимости от размера колечки пронумерованы числами от 1 до N, начиная с самого маленького и до самого большого. Колечки можно передвигать вдоль нити и протаскивать одно через другое, но только в том случае, если номера этих колечек отличаются более чем на единицу.

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

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

Входные данные
Первая строка входных данных содержит число N (2 ≤ N ≤ 50).

Во второй строке через пробел следуют N различных чисел от 1 до N — номера колечек, расположенных вдоль нити по часовой стрелке.

Выходные данные
Ваша программа должна вывести описание процесса упорядочения.

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

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

Если требуемого упорядочения колечек достичь не удается, программа должна вывести одно число –1
 
N небольшое, так что решается довольно просто начинаешь с самого маленького кольца и пропихиваешь его налево в начало массива, меняя местами с предыдущими кольцами, после этого пропихиваешь второе по размеру, третье... если по пути налево встретится кольцо, размер которого больше на 1 - пропихнуть его через всё ожерелье так, чтобы оно оказалось на конце, если и при этом встретится на 1 большее - пропихнуть его тоже, рекурсивно
 
Назад
Сверху