var
x, y, t, c, n, k: integer;
a: array [1..10] of integer;
begin
for t := 1 to 10 do
a[t] := 0;
read(x, y);
t := x;
while (t <> 0) do
begin
c += 1;
t := t div 10;
end;
k := 1;
for t := 1 to c do
k *= 10;
while (x <> 0) do
begin
n := y;
t := x div k;
while (n <> 0) do
begin
c := n mod 10;
n := n div 10;
if (c = t) and (a[c + 1] = 0) then
begin
write(t, ' ');
a[c + 1] += 1;
break;
end;
end;
x := x mod k;
k := k div 10;
end;
end.
Задачка вообще решается аналитически, но это может быть слишком сложно, так что я опишу как это можно "подобрать" по-умному. Буду отмечать жирным курсивом шестеричные числа. В чистовике их надо будет отмечать индексом 6 в конце
Начнём с того, что разделим выражение на два слагаемых. Первое слагаемое в шестеричной системе счисления 6^23 = 100000000000000000000000 (старшая единица и 23 нуля).
Второе слагаемое: 6^x - 6^3. Понятно, что если x=3 оно равно нулю.
Рассмотрим первый подходящий случай x=4, результат будет 6^4 - 6^3 = 5000. Почему? Можно, конечно, просто посчитать на калькуляторе или на листочке. Я предлагаю вынести общий множитель 6^3, то есть: 6^4 - 6^3 = (6-1) * 6^3 = (10-1) * 1000 = 5 * 1000 = 5000. То есть в старшем разряде имеем самую старшую цифру в нашей системе счисления и три нуля.
В следующем случае при x=5: 6^5 - 6^3 = (6^2 - 1) * 6^3 = (100-1) * 1000 = 55 * 1000 = 55000.
В случае x=6 получим 555000. Далее по аналогии - для любого икс будет (x-3) старших пятёрки и потом три нуля.
Видно, что при сложении с первым слагаемым никаких переполнений и переносов не возникнет, т.к. в первом слагаемом одни нули, кроме старшего разряда.
Получаем значение начального выражения
Для x=4: 100000000000000000005000
Для x=5: 100000000000000000055000
Для x=6: 100000000000000000555000
То есть для x=4 из 23 нулей первого слагаемого после сложения осталось 22. Для x=5 осталось 21. Для x=6 осталось 20.
Можно вывести нехитрую формулу: количество_нулей = 26 - x, подставить начальное условие количество_нулей=8 и решить уравнение из третьего класса: 8 = 26-x; x=18