Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 21, 2014 09:31:43

Stroncy
Зарегистрирован: 2014-11-20
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести таблицу заполненную по спирали.

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

Офлайн

#2 Ноя. 21, 2014 10:20:55

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Вывести таблицу заполненную по спирали.

зачем вы проходите онлайн курс, если не хотите решите задачу самостоятельно?

Офлайн

#3 Ноя. 21, 2014 14:47:43

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Вывести таблицу заполненную по спирали.

ilnur
онлайн курс
дайте пожалуйста ссылку.

По сабжу…

Офлайн

#4 Ноя. 21, 2014 22:29:21

Stroncy
Зарегистрирован: 2014-11-20
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести таблицу заполненную по спирали.

botinag, Спасибо..! ..решено..
Ссылка на курс в почте(личн.сообщении)

Офлайн

#5 Апрель 5, 2016 12:41:32

hottabov
Зарегистрирован: 2016-03-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести таблицу заполненную по спирали.

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()))

Офлайн

#6 Июнь 7, 2016 19:31:40

vpres
Зарегистрирован: 2016-06-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести таблицу заполненную по спирали.

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)

Офлайн

#7 Июнь 8, 2016 12:43:33

vpres
Зарегистрирован: 2016-06-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести таблицу заполненную по спирали.

Сделал вариант с формулами. Может кому пригодится:

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()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version