Разбор задач
1. Превращение
Самая простая задача. Необходимо правильно указать тип переменной `N` (longint) и точно выполнять указанные в задаче шаги, пока значение `N` не станет равным 1, а затем вывести количество выполненных шагов.
2. Разложение на простые слагаемые
Самая сложная задача. 15 баллов можно было получить с помощью рекурсивного перебора. Полное решение требует одновременно применения "длинной" арифметики (только сложение), динамического программирования и алгоритма для проверки числа на простоту. Самый сложный элемент – динамическое программирование. Количество разложений данного числа `N` на простые слагаемые является суммой по всем простым числам `P\ ≤\ N` количеств разложений числа `(N–P)` на простые слагаемые меньшие или равные `P`. Для `N\ =\ 0` существует 1 (пустое) разложение. При правильной организации вычислений необходим только один массив, в котором постепенно будет накапливаться количество разложений числа `I` на простые слагаемые меньшие и равные `P`.
3. Анаграммы
Решение требует применения математических знаний. Необходимо либо вспомнить, либо вывести формулу из комбинаторики для перестановок с повторениями – `N!/(K_1!*K_2!*…*K_M!)`. Если у нас `N` различных предметов, то существует `N!` их различных перестановок. Если `Q` некоторых предметов неразличимы, то число перестановок уменьшается в `Q!` раз.
Для 14 букв максимальное число различных перестановок равно `14!=87\ 178\ 291\ 200`. Это число больше `2*10^9` (`2^31`), следовательно, для результата необходима переменная типа extended.
4. Калькулятор
Простая "техническая" задача. Возможно решение с использованием case и одновременным формированием 3 строк. Использование подпрограммы существенно упрощает программу, так как для всех трех выводимых строк должны быть выполнены одни и те же действия.
var s:string;
procedure display(const s,v:string);
var i,k:integer;
begin
for i:=1 to length(s) do
begin
if s[i]='-' then k:=1
else k:=(ord(s[i])-ord('0'))*3+4;
if (k>0) and (k<length(v)) then
write(copy(v,k,3));
end;
writeln;
end;
begin
readln(s);
display(s,' _ _ _ _ _ _ _ _ ');
display(s,' _ | | | _| _||_||_ |_ ||_||_|');
display(s,' |_| ||_ _| | _||_| ||_| _|');
end.