К сожалению, и змейки детям надоели, поэтому воспитательнице нужна новая программа. Напишите программу, которая строит числовой квадрат требуемого размера.
Формат ввода
В первой строке записано число N — высота и ширина числового квадрата.
Формат вывода:
Требуется вывести сформированный числовой квадрат требуемого размера.
Чтобы квадрат был красивым, каждый его столбец — одинаковой ширины.
Пример
Ввод
3
Вывод
1 1 1
1 2 1
1 1 1
Ввод
5
Вывод
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
Решение
Простая задача, вызывающая затруднения из-за неочевидных проблем в определении ширины ячейки и формировании самого квадрата.
Начнем с формирования самого квадрата. Кажется, что нужна какая-то сложная функция, чтобы понять какое число должно стоять в той или иной ячейке, но если приглядеться, то можно заметить, что число в любой ячейке всегда равно минимальному расстоянию до ближайшего края квадрата. Таким образом нам всего лишь нужно найти расстояния до четырех краев и выбрать минимальное из них.
Теперь, когда мы разобрались с формированием квадрата, давайте подумаем о ширине ячеек. Одна из главных ошибок – прнять, что размер квадрата и есть то самое максимальное число, на ширину которого надо ориентроваться при вычислении ширины ячеек. Но на самом деле Максимальное число будет в середине, что наталкивает на мысль, о том, что число должно быть примерно равно половине ширины квадрата. Почему примерно? Потому, что в случае с нечетной длиной стороны, деление напополам даст дробный результат, который надо округлить в большую сторону.
Есть ли способ получить это число и не связываться с округлениями? Да. для этого достаточно прибавить к числу единицу и поделить целочислено на два. Тогда 1/2 будет равно единице как и 2/2. 3/2 дас нам 2, как и 4/2 и так далее.
Посмотреть код
Решение
size = int(input())
cell_width = len(str((size + 1) // 2))
for i in range(size):
for j in range(size):
print(f'{min(i + 1, j + 1, size - i, size - j):>{cell_width}}', end=' ')
print()
Когда не догадался про функцию min()!!!
size = int(input())
width = len(str((size + 1) // 2))
for i in range(1, size + 1):
for j in range(1, size + 1):
if i < j:
if j <= size – i:
print(f'{i:>{width}}’, end=’ ‘)
else:
print(f'{size – j + 1:>{width}}’, end=’ ‘)
elif i == j:
if i <= size / 2:
print(f'{i:>{width}}’, end=’ ‘)
else:
print(f'{size + 1 – i:>{width}}’, end=’ ‘)
else:
if i <= size – j:
print(f'{j:>{width}}’, end=’ ‘)
else:
print(f'{size – i + 1:>{width}}’, end=’ ‘)
print()
но работает)