Другие языки программирования и технологии

Программа в паскале на анализ последовательности

На вход программе подаётся последовательность символов, заканчивающаяся точкой (точка – признак конца и в последовательность не входит). Проверить является ли эта последовательность правильной записью римского числа меньшего 3000. Если является, то нужно перевести в десятичное число и вывести на экран. Массивы и строки не использовать.
>Массивы и строки не использовать.
Вообще-то римское число состоит из букв. Если нельзя использовать строки, то как предлагается его считывать?
Ладно, допустим, считывается по одному символу. Но при этом, скажем, сочетание IX является вполне допустимым, в то время как IM - нет. Т. е. встретив М я должен все равно вернуться и посмотреть, какой символ был перед ним. Как это предлагается сделать без массивов?
ОК, давайте хранить последний символ. Но тогда что делать, скажем, с повторами более 3, например IIII? Хранить отдельно 3 последних символа? Да ну нахрен, запутаться тут - как 2 пальца об асфальт.

В общем, я бы применил тут грубую силу и делал так:

1. Генерируем список списков (раз уж массивы нельзя) всех римских цифр от 1 до 3000 вместе с их десятичными значениями и длиной. Сие займет пару секунд, но куда деваться...
2. При вводе каждого символа удаляем из списка неподходящие значения.
3. Если по дороге список опустел, значит, ввели херню.
4. Самое короткое из оставшихся после точки значений и будет искомым.

Например, ввели Х.
Значит, мы удаляем все, что начинается не на Х - все наши I IV, IX MMM и все прочее.
Потом ввели I - удаляем все XX... XV... XC... У нас останется XI XII XIII XIV
Потом вводят точку - самый короткий у нас XI, значит, это 11.

Собссно, вперед, разминай пальцы...
Dmitry Posohov
Dmitry Posohov
84 313
Лучший ответ
вот ответ