Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на Python( метод «по часовой стрелке» или «по спирали»)

Mr Feelz Ученик (172), на голосовании 1 неделю назад
Напишите код, в котором двумерный массив(array) создается при ввода пользователем количества строк(n), столбцов(m) и выводит на экран новый массив(new_array), в котором выходные данные расположены по часовой стрелке
Язык программирования Python
Голосование за лучший ответ
tzi izi Знаток (485) 1 месяц назад
Что делать с матрицей? Что за новый массив и что там должно быть? Что значит выходные данные расположены по часовой стрелке? Их вывести надо так или что?
Mr FeelzУченик (172) 1 месяц назад
Что делать с матрицей:
Создать двумерный массив, где РАЗМЕРЫ(переменные n - строки и m - столбцы) И ДАННЫЕ ВНУТРИ МАССИВА вводит сам пользователь.
Что за новый массив и что там должно быть:
Новый массив - это результат в самом конце(new_array). В нем должен быть ответ задачи.
Что значит выходные данные расположены по часовой стрелке:
Есть такой «метод по часовой стрелке», который нужно придумать, чтобы в новом массиве(new array) были эти данные. К примеру: массив, который ввел пользователь:
1 2 3
4 5 6
7 8 9
А результат: 1 2 3 6 9 8 7 4 5 8
(ОНИ ДОЛЖНЫ ХРАНЯТСЯ В НОВОМ МАССИВЕ new_array И ИХ НУЖНО ВЫВЕСТИ)
Mr Feelz Ученик (172) Ошибся с результатом немного(8 в конце лишнее написал): А результат: 1 2 3 6 9 8 7 4 5
больше не чат гпт ???? Мыслитель (8216) 1 месяц назад
1 варик:

 def spiral_array(n, m, array): 
"""
Создает новый массив, содержащий элементы исходного массива,
расположенные по часовой стрелке.

Args:
n: Количество строк в массиве.
m: Количество столбцов в массиве.
array: Двумерный массив.

Returns:
Новый массив с элементами, расположенными по часовой стрелке.
"""

new_array = []
top, bottom = 0, n - 1
left, right = 0, m - 1

while top <= bottom and left <= right:
# Верхняя строка
for i in range(left, right + 1):
new_array.append(array[top][i])
top += 1

# Правый столбец
for i in range(top, bottom + 1):
new_array.append(array[i][right])
right -= 1

if top <= bottom:
# Нижняя строка
for i in range(right, left - 1, -1):
new_array.append(array[bottom][i])
bottom -= 1

if left <= right:
# Левый столбец
for i in range(bottom, top - 1, -1):
new_array.append(array[i][left])
left += 1

return new_array

# Ввод данных от пользователя
n = int(input("Введите количество строк: "))
m = int(input("Введите количество столбцов: "))

array = []
for _ in range(n):
row = list(map(int, input("Введите строку через пробел: ").split()))
array.append(row)

# Вызов функции и вывод результата
new_array = spiral_array(n, m, array)
print(*new_array)

второй варик:

 n = int(input("Введите количество строк n: ")) 
m = int(input("Введите количество столбцов m: "))

array = []
print("Введите элементы массива:")
for _ in range(n):
row = list(map(int, input().split()))
array.append(row)

new_array = []

top, bottom = 0, n - 1
left, right = 0, m - 1

while top <= bottom and left <= right:
# Слева направо по верхней строке
for i in range(left, right + 1):
new_array.append(array[top][i])
top += 1

# Сверху вниз по правому столбцу
for i in range(top, bottom + 1):
new_array.append(array[i][right])
right -= 1

if top <= bottom:
# Справа налево по нижней строке
for i in range(right, left - 1, -1):
new_array.append(array[bottom][i])
bottom -= 1

if left <= right:
# Снизу вверх по левому столбцу
for i in range(bottom, top - 1, -1):
new_array.append(array[i][left])
left += 1

print("Новый массив:")
print(' '.join(map(str, new_array)))
Даниил Церенов Профи (729) 1 месяц назад
Конечно! Вот пример кода на Python, который позволяет пользователю ввести размеры двумерного массива и затем заполняет этот массив, а также выводит его элементы по часовой стрелке.

Python

def create_array(n, m):
# Создаем пустой массив
array = []
print("Введите элементы массива:")
for i in range(n):
row = list(map(int, input(f"Строка {i + 1}: ").split()))
array.append(row)
return array

def rotate_array_clockwise(array):
n = len(array)
m = len(array[0]) if n > 0 else 0
new_array = [[0] * n for _ in range(m)] # Создаем новый массив с перевернутыми размерами

for i in range(n):
for j in range(m):
new_array[j][n - 1 - i] = array[i][j] # Перемещаем элементы по часовой стрелке

return new_array

def print_array(array):
for row in array:
print(" ".join(map(str, row)))

def main():
n = int(input("Введите количество строк (n): "))
m = int(input("Введите количество столбцов (m): "))

original_array = create_array(n, m)
print("Исходный массив:")
print_array(original_array)

rotated_array = rotate_array_clockwise(original_array)
print("Массив, расположенный по часовой стрелке:")
print_array(rotated_array)

if __name__ == "__main__":
main()

### Как работает код:
1. Ввод данных: Пользователь вводит количество строк (n) и количество столбцов (m), после чего вводит элементы массива.
2. Создание массива: С помощью функции create_array создается двумерный массив на основе введенных пользователем данных.
3. Поворот по часовой стрелке: Функция rotate_array_clockwise создает новый массив, в который элементы оригинального массива помещаются в соответствии с поворотом на 90 градусов по часовой стрелке.
4. Вывод массива: Функция print_array выводит массив в удобном виде.

### Пример ввода/вывода:
Введите количество строк (n): 2
Введите количество столбцов (m): 3
Введите элементы массива:
Строка 1: 1 2 3
Строка 2: 4 5 6
Исходный массив:
1 2 3
4 5 6
Массив, расположенный по часовой стрелке:
4 1
5 2
6 3

Вы можете запустить этот код в вашей среде Python и ввести свои данные для получения желаемого результата. Если у вас есть дополнительные вопросы или нужны изменения в коде, дайте знать!
Похожие вопросы