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

Помогите с задачкой по Паскалю

Вот собственно сама задачка:
D. Гадание

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

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

Конечно же, Мария
могла бы выбрать сонет наугад, руководствуясь сегодняшним настроением. Но
порядка в этом нет никакого. Поэтому Мария придумала для себя четкую схему
выбора странички.

Алгоритм выбора
сонета выглядит следующим образом: Задается число N, в числе N цифры
не повторяются и среди них нет цифры 0. В этом числе меняются местами
цифры, сортируя их по возрастанию. Затем полученное число умножается на свое
любимое число 9. Иногда это произведение получается слишком большим, у
Шекспира 153 сонета, поэтому в качестве номера страницы Мария берет сумму цифр
произведения.

По числу N
выведите номер сонета на сегодня.



Входные данные

Дано натуральное
число N (N<=1000). Гарантируется, что
среди цифр числа N не встречается цифры 0. Все цифры
числа N различны.

Выходные данные

Выведите единственное
число — искомый номер начального сонета.



Примеры

входные данные

321

выходные данные

9
var
N,i :integer;
ar : array [1..9] of integer;
sum : integer;
pow : integer;
begin
write('Enter number: ');
readln(N);

for i := 1 to 9 do ar[i] := 0;

while (N <> 0) do begin
inc(ar[(N mod 10)]);
N := N div 10;
end;

pow := 1;
N := 0;

for i := 9 downto 1 do begin
if(ar[i] > 0) then
begin N := i * pow + N;
pow := pow * 10;
end;
end;

N := N * 9;

while (N <> 0) do begin
sum := sum + (N mod 10);
N := N div 10;
end;

writeln(sum,' ');

end.
Orazberdi Hojamberdiyev
Orazberdi Hojamberdiyev
5 430
Лучший ответ
Владимир Танасов Ну и смысл?
Показать что ВЫ умеете решать такие задачи? Я рад.

Вообще просили помочь =)
Владимир Танасов И кст. решение неправильное.
В чем помочь? задание не очень сложное, хотя и много букв.

Разбейте задачу на подзадачи.
1 - Проблема разложения числа на цифры
решается либо переводом в строку (процедура Str), откуда числа легко извлечь, либо последовательным делением на 10 и проверкой остатка от деления (div, mod) с занесением н-р в массив. Т. к. число <= 1000 размер массива очевиден.

2 - Сортировка. Возьмите, который лучше всего знаете. 4 числа всего.

3 - Получение полученного числа из строки (если выбрали работу со строками) - опять-же не проблема. (процедура Val). Иначе последовательно умножаете каждую цифру на кратное 10.

4 - Если превысило - опять разложение на цифры (логично сделать функцию) ну и сумму не составит труда.

Пишите на почту, если что.
Владимир Танасов Это если влоб. Но кажется есть и другой способ, =) Сейчас пока еду думать тяжеловато