#python #python_3x #алгоритм
Суть задачи такова: Пусть у нас есть чётное число N команд. Требуется составить календарь игр, который будет удовлетворять следующим условиям: Команды играют по круговой системе (каждая играет с каждой) Календарь поделен на туры (которых, очевидно, будет N-1) Каждая команда играет строго одну игру за тур Пишу сюда впервые, изучаю Python совсем недавно. На первый взгляд задача очень простая, но корректно накодить у меня не получается. Заранее спасибо за ответы!
Ответы
Ответ 1
Реализация на Питоне round-robin алгоритма из @MBo ответа: import collections teams = "ABCDEF" n = len(teams) tail = collections.deque(teams[1:n//2] + teams[n//2:][::-1]) for _ in range(len(tail)): print_round(teams[0], *tail) tail.rotate() где print_round() показывает текущий тур: def print_round(*teams, sep='\n'): n = len(teams) print(*teams[:n//2]) print(*teams[n//2:][::-1]) print(end=sep) Результат A B C D E F A D B E F C A E D F C B A F E C B D A C F B D EОтвет 2
Для организации такого календаря есть round-robin tournament алгоритм. Выстраиваем команды в две строки A B C D E F В каждом туре команда из верхней строки играет с соответствующей нижней. Для перехода к следующему туру циклически сдвигаем все команды, кроме первой (её положение всегда фиксировано) A B -> C ^ | / v D <- E <- F Получается A D B E F C Повторяем сдвиги N-1 раз Удачи в кодировании.
Комментариев нет:
Отправить комментарий