Можете помощь по языке: Python
Требуется заполнить массив размера N × N единичками по спирали (начиная с верхнего левого угла по часовой стрелке, см. пример).

Входные данные
С клавиатуры вводится число N (нечетное, натуральное и не превышающее 50).

Выходные данные
Требуется вывести на экран построенную спираль.

примеры
входные данные:
7

выходные данные:
1111111
0000001
1111101
1000101
1011101
1000001
1111111

Приложения:

p15: можно скопипастить код, если есть
hderyb: Либо в виде ответа+немного дополнить код чтобы он выводил на экран данный текст
hderyb: Окей
hderyb: def spiralize(n):
a = ['1' * n]

for i in range(n // 2):
if '1' in a[i][i:-i - 1]:
a.append(a[i][0:i + 1] + '0' * (n - 2 * (i + 1)) + a[i][0:i + 1][::-1])
else:
a.append(a[i][0:i + 1] + '1' * (n - 2 * (i + 1)) + a[i][0:i + 1][::-1])

a += (a * 2)[0:n // 2][::-1]
if n % 2 == 0:
a.remove(a[n // 2])
hderyb: for j in range(n):
a[j] = list(map(int, list(a[j])))

if n % 2 != 0:
b = n // 2
else:
if n % 4 == 0:
b = n // 2 - 1
else:
b = n // 2

for k in range(b):
if a[k + 1][k] == 1:
a[k + 1][k] = 0
else:
a[k + 1][k] = 1
return a
p15: я думаю что можно накладывать какую-то побитовую маску и решение будет красивее. но ваше в принципе рабочее
hderyb: Знаю что некоторые numpy пользовались
hderyb: Ну здесь такой, на коленках сделанный у меня) лишь бы работал
hderyb: Думаю здесь можно некоторые вещи корректировать
Meir63: Результаты не правильно!

Ответы

Ответ дал: avval666
0
Здравствуйте! Вот правильный полноценный код.
n = int(input())
a = [[0] * n for i in range(n)]
i, j, di, dj = 0, 0, 0, 1
for k in range(n * n):
a[i][j] = k + 1
if a[(i + di) % n][(j + dj) % n]:
di, dj = dj, -di
i += di
j += dj
for i in range(n):
for j in range(n):
print(a[i][j], end='')
print()

Meir63: Результаты не правильно!
Вас заинтересует