Очевидно, решения нет, если нужно выпустить ровно K = NM - 1 человека: он должен перейти в какую-то комнату, но из всех комнат, кроме его, есть путь наружу.
При всех остальных K можно, например, поступить так:
- отсчитать сверху и слева направо K комнат, в них открыть дверь вверх
- в оставшихся комнатах, не находящихся в нижнем ряду, открыть путь вниз
- в оставшихся комнатах нижнего ряда, кроме правого нижнего угла, открыть дверь вправо
- в правом нижнем углу, если там ещё не открыта дверь, открыть дверь влево
В итоге K человек уйдут с территории через верх, а остальные будут бесконечно ходить между двумя комнатами в правом нижнем углу.
Код (python 3):
N, M, K = map(int, input().split())
if K == N * M - 1:
print("IMPOSSIBLE")
elif K == N * M:
for _ in range(N):
print("U" * M)
else:
for _ in range(K // M):
print("U" * M)
if K // M < N - 1:
print("U" * (K % M) + "D" * (M - K % M))
for __ in range(N - 1 - K // M):
print("D" * M)
print("R" * (M - 1) + "L")
else:
print("U" * (K % M) + "R" * (M - K % M - 1) + "L")
Очевидно, решения нет, если нужно выпустить ровно K = NM - 1 человека: он должен перейти в какую-то комнату, но из всех комнат, кроме его, есть путь наружу.
При всех остальных K можно, например, поступить так:
- отсчитать сверху и слева направо K комнат, в них открыть дверь вверх
- в оставшихся комнатах, не находящихся в нижнем ряду, открыть путь вниз
- в оставшихся комнатах нижнего ряда, кроме правого нижнего угла, открыть дверь вправо
- в правом нижнем углу, если там ещё не открыта дверь, открыть дверь влево
В итоге K человек уйдут с территории через верх, а остальные будут бесконечно ходить между двумя комнатами в правом нижнем углу.
Код (python 3):
N, M, K = map(int, input().split())
if K == N * M - 1:
print("IMPOSSIBLE")
elif K == N * M:
for _ in range(N):
print("U" * M)
else:
for _ in range(K // M):
print("U" * M)
if K // M < N - 1:
print("U" * (K % M) + "D" * (M - K % M))
for __ in range(N - 1 - K // M):
print("D" * M)
print("R" * (M - 1) + "L")
else:
print("U" * (K % M) + "R" * (M - K % M - 1) + "L")
i: integer;
label 1, 2, 3, 4;
begin
1:
Writeln('1)Периметр квадрата');
Writeln('2)Площадь равностороннего треугольника');
Write('Ваш выбор >>> ');
Read(n);
Writeln('');
if n = 1 then
begin
2:
Write('Введите площадь кварата >>> ');
Read(s);
if s < 0 then
begin
Writeln('Некорректный ввод');
Writeln('');
goto 2;
end;
a := Sqrt(s) * 4;
Writeln('');
Writeln('Периметр квадрата >>> ', a);
goto 4;
end
else
if n = 2 then
begin
3:
Write('Введите периметр равностороннего треугольника >>> ');
Read(a);
if a < 0 then
begin
Writeln('Некорректный ввод');
Writeln('');
goto 3;
end;
s := (sqrt(3) / 4) * Sqr(a/3);
Writeln('');
Writeln('Площадь равностороннего треугольника >>> ', s);
goto 4;
end
else
begin
Writeln('Некорректный ввод');
Writeln('');
goto 1;
end;
4:
Writeln('');
Writeln('1)Заного');
Writeln('2)Выйти');
Write('Ваш выбор >>> ');
Read(n);
Writeln('');
if n = 1 then
goto 1 ;
else
exit;
end.