перевести код на Python const MAX = 38;
var n,x,y,i,j : integer;
var m : array [1..MAX, 1..MAX] of integer;
var maxH : integer;
procedure spojuj(x,y,hloubka : integer);
var i,j : integer;
begin
if hloubka > maxH then maxH := hloubka;
for i:=1 to MAX do
if m[y, i] > 0 then
begin
dec(m[y,i]);
spojuj(y, i, hloubka +1);
spojuj(i, y, hloubka +1);
inc(m[y,i]);
end
else if m[i, y] > 0 then
begin
dec(m[i,y]);
spojuj(i, y, hloubka +1);
spojuj(y, i, hloubka +1);
inc(m[i,y]);
end;
end;
begin
maxH := 0;
for i:=1 to MAX do
for j:=1 to MAX do
m[i,j] := 0;
read(n);
for i:=1 to n do
begin
read(x,y);
inc(m[x,y]);
end;
for i:=1 to MAX do
for j:=1 to MAX do
if m[i,j] > 0 then
begin
dec(m[i,j]);
spojuj(i,j,1);
spojuj(j,i,1);
inc(m[i,j]);
end;
write(maxH);
end.
По условию:
abc
+ abc
bca
Понятно, что максимальным число будет, если сложение в двух младших разрядах идет через перенос -> получим систему уравнений:
2c = a +16
2b +1 = c + 16
2a + 1 = b
равносильная ей система
2с = a + 16
c = 2b - 15
b = 2a + 1
подставляем третье во второе, получаем первые два уравнения
2с = a + 16
c = 4a - 13 из этих двух уравнений -> 7a = 42 -> a = 6 -> из третьего уравнения b = 13
13 = D(16), из первого уравнения с = 22/2 = 11(10) = B(16)
-> abc(16) = 6DB(16) = 1755(10), DB6(16) = 3510(10) -> 2abc = bca
Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу.
Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.