Найти - Пользователи
Полная версия: Вывести таблицу заполненную по спирали.
Начало » Центр помощи » Вывести таблицу заполненную по спирали.
1
Stroncy
Выведите таблицу размером n×n, заполненную числами от 1 до n2 по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере (здесь n=5):
http://i65.fastpic.ru/big/2014/1121/d0/94bb6e62306e412bf039ef7c31e44ad0.jpg
ilnur
зачем вы проходите онлайн курс, если не хотите решите задачу самостоятельно?
botinag
ilnur
онлайн курс
дайте пожалуйста ссылку.

По сабжу…
Stroncy
botinag, Спасибо..! ..решено..
Ссылка на курс в почте(личн.сообщении)
hottabov
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()))
vpres
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
Сделал вариант с формулами. Может кому пригодится:
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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB