Advertisement
Laster_Alex

Z5

Feb 17th, 2022
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.11 KB | None | 0 0
  1. var x, m: longint;
  2. var is_0, i, g, counter: integer;
  3. var digits: array [0..9] of integer;  // До 9 потому что максимальное кол - во оригинальных цифр = 10.
  4. var a, b, result: integer;
  5. begin
  6.     is_0 := 0;  // Это проверка, есть ли в числе 0. Если есть - надо будет убрать один вариант последней цифры при подсчёте.
  7.     readln(x);
  8.    
  9.     a := 0;
  10.     i := 0;
  11.    
  12.     while (x > 0) do begin  // Простой перебор цифр в числе х, почти такой же был в К.В.5
  13.         a := a + 1;
  14.         b := x mod 10;  // Цифра под номером a в числе x
  15.         counter := 0;  // Счётчик. Нужен для проверки, оригинальна ли цифра.
  16.         for g := 0 to i-1 do begin
  17.             if digits[g] <> b then counter := counter + 1
  18.             else break;  // Если цифра уже есть в массиве, то можно сразу останавливаться.
  19.         end;
  20.         if counter = i then begin // Если счётчик насчитал всю длину i, то значит совпадений не было.
  21.             digits[i] := b;
  22.             i := i + 1;
  23.             if (b = 0) then is_0 := 1;  // Если цифра = 0, то запомним это.
  24.         end;
  25.         x := x div 10;
  26.        
  27.     end;
  28.     // На этом моменте у нас есть список со всеми оригинальными цифрами.
  29.     // Их количество равно i. Длина числа x равна a. Применим правила комбинаторики, как в 1 пункте:
  30.     result := 1;
  31.    
  32.     for g := 1 to a-1 do begin  // Заканчиваем a-1 потому что последнюю цифру надо обработать специально,
  33.     // ей нельзя 0.
  34.         result := result * i;
  35.     end;
  36.     result := result * (i-is_0);  // Обработка последней цифры
  37.     writeln(result);  // Вывод.
  38. end.
  39.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement