Сортировка таблицы слов
Created on: January 10, 2025
Created on: January 10, 2025
Считать и отсортировать таблицу
Дополнительные задачи
макс.максимум 20 балл.20 баллов
Дедлайн: 13 янв., 01:30
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Напишите программу, которая сначала считывает элементы таблицы один за другим, затем выводит их в виде таблицы. Каждый ряд таблицы нужно отсортировать по возрастанию, кроме первого и последнего рядов (в них порядок элементов нужно оставить без изменений). Не используйте обращение к рядам по индексу (к элементам рядов — можно).
Формат ввода
На первых двух строках вводятся натуральные числа — количество строк (рядов) в таблице и количество столбцов в таблице.
Далее вводятся сами элементы таблицы — слова, каждое на отдельной строчке; подряд идут элементы сначала первого ряда, затем второго, и так далее.
Формат вывода
Ряды таблицы; каждый ряд — элементы таблицы на одной и той же строке, после каждого элемента выводится символ табуляции.
Пример
Ввод Вывод
4
3
удивительная
тройка
треф
счастливая
семёрка
червей
желательный
туз
пик
зловещая
дама
пик
удивительная тройка треф
семёрка счастливая червей
желательный пик туз
зловещая дама пик
Ниже приведён пример решения на Python. Основная идея в том, чтобы:
Обратите внимание, что мы не используем обращение к строкам по индексу (то есть не делаем что-то вроде table[i]
). Мы просто каждую строку отдельно считываем и обрабатываем «на лету».
pythondef main(): import sys data = sys.stdin.read().strip().split('\n') # Первые два элемента — это n и m n = int(data[0]) m = int(data[1]) # Далее в data идут сами слова таблицы, # но мы будем считывать их порциями по m слов для каждой строки. # Текущий указатель в списке data pointer = 2 # 1. Считываем первую строку и выводим без изменений first_row = data[pointer : pointer + m] pointer += m print(*first_row, sep='\t') # 2. Считываем и обрабатываем «средние» строки (если они есть) for _ in range(n - 2): row = data[pointer : pointer + m] pointer += m # Сортируем элементы текущей «средней» строки row_sorted = sorted(row) print(*row_sorted, sep='\t') # 3. Считываем последнюю строку (если n > 1, иначе первая строка уже и есть последняя) if n > 1: last_row = data[pointer : pointer + m] pointer += m # Выводим без изменений print(*last_row, sep='\t') if __name__ == "__main__": main()
Пояснения:
data
(разбивая её по строкам).data
лежат все слова таблицы, идущие подряд. Мы идём по этому списку с помощью срезов (slice): берём очередные элементов как строку таблицы.Так мы не обращаемся к строкам по индексу вида table[i]
, а просто последовательно читаем по элементов для каждой из строк и обрабатываем их «на месте».
Не используй библиотеки , функции и убери комментарии
pythonn=int(input()) m=int(input()) a=[] for _ in range(n*m): a.append(input()) for i in range(m): print(a[i],end='\t') print() p=m for _ in range(n-2): r=a[p:p+m] for i in range(m): for j in range(m-i-1): if r[j]>r[j+1]: r[j],r[j+1]=r[j+1],r[j] for x in r: print(x,end='\t') print() p+=m if n>1: for i in range(p,p+m): print(a[i],end='\t') print()