Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
all-problems.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
70.17 Кб
Скачать

2008

1. «Перестановки» (5 баллов)

Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.

Ограничения: 2 ≤ M ≤ 8, символы – буквы латинского алфавита.

Ввод из файла permut.in. В первой строке файла находится исходная строка.

Вывод в файл permut.out. Вывести в каждой строке файла по одной перестановке. Перестановки можно выводить в любом порядке. Повторений и строк. Не являющихся перестановками исходной, быть не должно.

Пример

Ввод 1 Ввод 2

AB IOX

Вывод 1 Вывод 2

AB XOI

BA OIX

IXO

XIO

OXI

IOX

2. «Электронная таблица» (15 баллов)

Напишите программу, выполняющую функции очень простой электронной таблицы. Она работает с таблицей из 9 строк от 1 до 9 и 26 столбцов от A до Z. Клетки таблицы обозначаются именами, составленными из кодов столбца и строки, например, B1, S8.

Каждая клетка содержит выражение. Выражения используют целые константы, ссылки на клетки, скобки, бинарные операторы +, -, *, / (целочисленное деление). Так, 567, E8/2, (3+B3)*(C4-1) являются правильными выражениями. Все операторы целочисленные. Деление на ноль дает в результате ноль.

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

Ограничения: длина выражения в одной ячейке до 255 символов, все аргументы и результаты меньше 1 000 000.

Ввод из файла sprsheet.in. Первая строка содержит число выражений N. Следующие N строк имеет формат <имя клетки>=<выражение>. Все выражения корректные каждая ячейка определена не более чем одним выражением.

Вывод в файл sprsheet.out. В единственной строке выводится или значение клетки A1, или число 1000000 (один миллион), если значение клетки A1 не может быть найдено из-за циклической ссылки.

Пример

Ввод

4

A1=B1+C5

B1=20

C5=B1 /D7-E1*E1

E1=(3+1)*2

Вывод

-44

3. «Упаковка символов» (15 баллов)

Билл пытается компактно представить последовательности прописных символов от A до Z с помощью упаковки повторяющихся подпоследовательностей внутри них. Например, один из способов представить последовательность AAAAAAAAAABABABCCD – это 10(A)2(BA)B2(C)D. Он формально определяет сжатые последовательности символов и правила перевода их в несжатый вид следующим образом:

  • Последовательность, содержащая один символ от A до Z, является упакованной. Распаковка этой последовательности дает ту же последовательность из одного символа.

  • Если S и Q – упакованные последовательности, то SQ – также упакованная последовательность. Если S распаковывается в S', а Q распаковывается в Q', то SQ распаковывается в S'Q'.

  • Если S – упакованная последовательность, то X(S) – также упакованная последовательность, где X – десятичное представление целого числа, большего 1. Если S распаковывается в S', то X(S) распаковывается в S', повторенную X раз.

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

Ограничения: длина исходной последовательности от 1 до 100.

Ввод из файла folding.in. В первой строке находится последовательность символов от A до Z.

Вывод в файл folding.out. В единственной строке выводится упакованная последовательность наименьшей длины, которая распаковывается в заданную последовательность. Если таких последовательностей несколько, можно выводить любую.

Пример

Ввод 1 Ввод 2

AAAAAAAAABABABCCD NEERCYESYESYESNEERCYESYESYES

Вывод 1 Вывод 2

9(A)3(AB)CCD 2(NEERC3(YES))

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]