Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 21.08.2019
Сообщений: 3

Заполнение массива по спирали

21.08.2019, 16:19. Показов 8454. Ответов 4

Студворк — интернет-сервис помощи студентам
Я написал код, но он не проходит два теста в тестирующей системе. Можете, пожалуйста, привести примеры комбинаций чисел, при которых мой код не работает.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
def print_pretty(a):
    for row in a:
        print(''.join(list(map(lambda x: ' '*(4- len(str(x)))+str(x), row))))
 
strings = input().split()
n = int(strings[0])
m = int(strings[1])
left = 0
right = 0
top = 0
is_first = True
bottom = 0
counter = 0
string = 'l-r'
a = [[0] * m for i in range(n)]
 
for k in range(n * m):
    if n == 1 and m == 1:
        a[0][0] = 1
        break
    if (left + right + counter == m - 1) and (string == 'l-r'):
        string = 't-b'
        counter = 0
        top += 1
        is_first = False
    if (bottom + top + counter == n) and (string == 't-b'):
        string = 'r-l'
        counter = 0
        right += 1
    if (left + right + counter == m) and (string == 'r-l'):
        string = 'b-t'
        counter = 0
        bottom += 1
    if (left + right + counter == n) and (string == 'b-t'):
        string = 'l-r'
        counter = 0
        left += 1
 
    if is_first:
        a[top][counter + left] = k + 1
    if string == 'l-r':
        a[top][counter + left] = k + 1
    if string == 't-b':
        a[counter + top - 1][m - right - 1] = k + 1
    if string == 'r-l':
        a[n - bottom - 1][m - counter - right] = k + 1
    if string == 'b-t':
        a[n - bottom - counter][left] = k + 1
    counter += 1
 
print_pretty(a)
Добавлено через 16 минут
Вот полное условие задачи и пример ответа:



По данным числам n и m заполните двумерный массив размером n*m числами от 1 до n*m по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере.

ВХОДНЫЕ ДАННЫЕ
Вводятся два числа n и m

ВЫХОДНЫЕ ДАННЫЕ
Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.

ВХОДНЫЕ ДАННЫЕ
4 5
ВЫХОДНЫЕ ДАННЫЕ

1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.08.2019, 16:19
Ответы с готовыми решениями:

Заполнение массива по спирали
Всем привет! Питон начал изучать недавно. Не могу решить задачу. На ввод поступает число n. Требуется в квадрате размером n*n...

Заполнение массива по спирали
я написал код точнее переделал из сишного, он работает правильно кроме одного фактора, что там записывается в массив в след виде: mas = 1...

Заполнение массива по спирали
Помогите, пожалуйста, с решением задачи на языке C#: Необходимо ввести с клавиатуры размерность массива и заполнить его по спирали...

4
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
23.08.2019, 17:38
Лучший ответ Сообщение было отмечено CyberPank2020 как решение

Решение

Какой-то вырвиглазный код с кучей if-ов.
Могу предложить вам модифицировать моё старое решение. Главная правка будет в length_producer, приспособить под прямоугольник вместо квадрата. Заполнить матрицу по спирали
1
0 / 0 / 0
Регистрация: 21.08.2019
Сообщений: 3
24.08.2019, 10:08  [ТС]
Спасибо, очень помог ваш код!
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
26.08.2019, 11:11
CyberPank2020, так держать!
0
0 / 0 / 0
Регистрация: 21.08.2019
Сообщений: 3
01.09.2019, 14:42  [ТС]
У меня получилось доработать свой код. Нужно было просто везде поставить elif-ы и добавить одно условие:


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
def print_pretty(a):
    for row in a:
        print(''.join(list(map(lambda x: ' ' * (4 - len(str(x))) + str(x), row))))
 
 
n, m = list(map(int, input().split()))
left = 0
right = 0
top = 0
is_first = True
bottom = 0
counter = 0
string = 'l-r'
a = [[0] * m for i in range(n)]
 
for k in range(n * m):
    if n == 1 and m == 1:
        a[0][0] = 1
        break
    elif (left + right + counter >= m - 1) and (string == 'l-r'):
        if left + right + counter > m - 1:
            counter = 1
        else:
            counter = 0
        string = 't-b'
        top += 1
        is_first = False
    elif (bottom + top + counter == n) and (string == 't-b'):
        string = 'r-l'
        counter = 0
        right += 1
    elif (left + right + counter == m) and (string == 'r-l'):
        string = 'b-t'
        counter = 0
        bottom += 1
    elif (left + right + counter == n) and (string == 'b-t'):
        string = 'l-r'
        counter = 0
        left += 1
 
    if is_first:
        a[top][counter + left] = k + 1
    elif string == 'l-r':
        a[top][counter + left] = k + 1
    elif string == 't-b':
        a[counter + top - 1][m - right - 1] = k + 1
    elif string == 'r-l':
        a[n - bottom - 1][m - counter - right] = k + 1
    elif string == 'b-t':
        a[n - bottom - counter][left] = k + 1
    counter += 1
 
print_pretty(a)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2019, 14:42
Помогаю со студенческими работами здесь

Заполнение массива по спирали
Клеточное поле образовано пересекающимися прямыми, расстояние между ними одинаково и = q. Точки пересечение пронумерованы против часовой...

Заполнение массива по спирали
Здравствуйте! Помогите заполнить двумерный массив по спирали размером n*m и вывести индексы i и j (строку и столбец) элемента, имеющего...

Заполнение массива по спирали
НАПРИМЕР ДАН МАССИВ N*N ТОЕСТЬ N в квадрате если 4 то равен 16 если 5 то равен 25 на экране должно вводиться следуещее вот ...

Заполнение массива по спирали
Дано число n. Создайте массив A и заполните его по спирали, начиная с числа 0 в центральной клетке A. Спираль выходит вверх, далее...

Заполнение массива по спирали
заполнение массива по спирали начиная с левого нижнего угла за часовой стрелкой 5 06 07 08 09 4 19 20 21 10 3 18 25 22 11 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru