S. Числовой квадрат

К сожалению, и змейки детям надоели, поэтому воспитательнице нужна новая программа. Напишите программу, которая строит числовой квадрат требуемого размера.

Формат ввода

В первой строке записано число 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 и так далее.

Посмотреть код

Решение

Python
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()
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
16.05.2024 12:47

Когда не догадался про функцию 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()

но работает)