Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var x, m: longint;
- var is_0, i, g, counter: integer;
- var digits: array [0..9] of integer; // До 9 потому что максимальное кол - во оригинальных цифр = 10.
- var a, b, result: integer;
- begin
- is_0 := 0; // Это проверка, есть ли в числе 0. Если есть - надо будет убрать один вариант последней цифры при подсчёте.
- readln(x);
- a := 0;
- i := 0;
- while (x > 0) do begin // Простой перебор цифр в числе х, почти такой же был в К.В.5
- a := a + 1;
- b := x mod 10; // Цифра под номером a в числе x
- counter := 0; // Счётчик. Нужен для проверки, оригинальна ли цифра.
- for g := 0 to i-1 do begin
- if digits[g] <> b then counter := counter + 1
- else break; // Если цифра уже есть в массиве, то можно сразу останавливаться.
- end;
- if counter = i then begin // Если счётчик насчитал всю длину i, то значит совпадений не было.
- digits[i] := b;
- i := i + 1;
- if (b = 0) then is_0 := 1; // Если цифра = 0, то запомним это.
- end;
- x := x div 10;
- end;
- // На этом моменте у нас есть список со всеми оригинальными цифрами.
- // Их количество равно i. Длина числа x равна a. Применим правила комбинаторики, как в 1 пункте:
- result := 1;
- for g := 1 to a-1 do begin // Заканчиваем a-1 потому что последнюю цифру надо обработать специально,
- // ей нельзя 0.
- result := result * i;
- end;
- result := result * (i-is_0); // Обработка последней цифры
- writeln(result); // Вывод.
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement