Форум сайта python.su
0
Выведите таблицу размером n×n, заполненную числами от 1 до n2 по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере (здесь n=5):
http://i65.fastpic.ru/big/2014/1121/d0/94bb6e62306e412bf039ef7c31e44ad0.jpg
Офлайн
22
зачем вы проходите онлайн курс, если не хотите решите задачу самостоятельно?
Офлайн
35
Офлайн
0
botinag, Спасибо..! ..решено..
Ссылка на курс в почте(личн.сообщении)
Офлайн
0
def zm(n): dx, dy = 1, 0 x, y = 0, 0 arr = [[None] * n for _ in range(n)] for i in range(1, n**2+1): arr[x][y] = i nx, ny = x+dx, y+dy if 0 <= nx < n and 0 <= ny < n and not arr[nx][ny]: x, y = nx, ny else: dx, dy = -dy, dx x, y = x+dx, y+dy for x in list(zip(*arr)): print(*x) zm(int(input()))
Офлайн
0
hottabovОтличное решение. Мне нравится идея с переключателями.
n = int(input()) i, j = 0, -1 max_j, max_i = n - 1, n - 1 min_j, min_i = 0, 1 count = 1 mtrx = [[0 for j in range(n)] for i in range(n)] while True: while j < max_j: j += 1 mtrx[i][j] = count count += 1 max_j -= 1 while i < max_i: i += 1 mtrx[i][j] = count count += 1 max_i -= 1 while j > min_j: j -= 1 mtrx[i][j] = count count += 1 min_j += 1 while i > min_i: i -= 1 mtrx[i][j] = count count += 1 min_i += 1 if j == (n - 1) // 2 and i == n // 2: break print() print() for i in range(n): for j in range(n): print(mtrx[i][j], end = '\t') print() print() input()
Отредактировано vpres (Июнь 7, 2016 19:40:16)
Офлайн
0
Сделал вариант с формулами. Может кому пригодится:
def mtrx_snake(i, j, n): """ Возвращает значение, расположенное в матрице размером n x n в строке i и в столбце j. Матрица заполнена порядковыми числами спиралью по часовой стрелке """ k = min(i, j, n-i-1, n-j-1) if i == k: return 4 * (k * n - k**2) + j - k + 1 elif j == n - k - 1: return 4 * (k * n - k**2) + n - 3 * k + i elif i == n - k - 1: return 4 * (k * n - k**2) + 3 * n - 5 * k - j - 2 else: return 4 * (k * n - k**2) + 4 * n - 7 * k - i - 3 n = int(input()) mtrx = [[0 for j in range(n)] for i in range(n)] print() for i in range(n): for j in range(n): mtrx[i][j] = mtrx_snake(i, j, n) print(mtrx[i][j], end = '\t') print()
Офлайн