Size: a a a

2020 December 07

O

Oleg in Delphi & Lazarus
Nik
Там вроде по условию надо каждый с каждым, чтобы посоревновались.. Хотя может я не так читаю задание
Я этого не увидел. Автору задачи стоит уточнить этот момент.
источник

N

Nik in Delphi & Lazarus
Oleg
Я этого не увидел. Автору задачи стоит уточнить этот момент.
у меня после прочтения задания ассоциация была с футбольными чемпионатами.. там каждая команда со всеми остальными играет по 2 раза за чемпионат
источник

O

Oleg in Delphi & Lazarus
Это гонки, хронометраж по заезду сняли, в таблицу занесли - в принципе, всё. А так-то турнирные таблицы по-разному могут составляться - и швейцарка, и круговой (по разу с каждым), и круговой как в футбольном чемпионате...
источник

N

Nik in Delphi & Lazarus
Oleg
Это гонки, хронометраж по заезду сняли, в таблицу занесли - в принципе, всё. А так-то турнирные таблицы по-разному могут составляться - и швейцарка, и круговой (по разу с каждым), и круговой как в футбольном чемпионате...
ну, исходя из 3 участников за раунд - надо убрать одного участника из общего списка (сам с собой он не может соревноваться) и найти количество уникальных пар из оставшихся участников. На мой взгляд так получится подсчитать необходимое количество раундов.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Alexey Shumkin
мои глаза! 🙈
я бы не рекомендовал именовать аргументы методов , начиная  со знака подчёркивания... - это ппц как больно смотреть..
есть code style guide от Borland/Embarcadero
https://t.me/Delphi_Lazarus/139252
Спасибо, не находил ранее этот материал. Какие ни будь еще замечания?
источник

O

Oleg in Delphi & Lazarus
Nik
ну, исходя из 3 участников за раунд - надо убрать одного участника из общего списка (сам с собой он не может соревноваться) и найти количество уникальных пар из оставшихся участников. На мой взгляд так получится подсчитать необходимое количество раундов.
А как в уникальную пару выбирать третьего? А если участников одного заезда будет не три, а четыре? На самом деле, мое решение через НОК даёт одновременно два результата: 1) доказательство минимальности 2) порядок построения турнирной таблицы для любых N и M хоть по сценарию, когда не требуется сравнение каждого с каждым, хоть по сценарию, когда требуется. Насчёт порядка построения в первом случае (полнота сравнений не требуется): берется одномерный массив длиной НОК (N,M) и заполняется последовательностями чисел от 1 до N. Таких последовательностей в этот массив поместится целое количество (по определению НОК). Далее берём первые M элементов этого массива - это номера участников первого заезда; вторые M элементов - номера участников второго заезда и т.д. Так как НОК длится на M, сформированные заезды будут полными (в каждом по M участников). Оценка сложности алгоритма - O(M*N) как по времени, так и по памяти. Самое сложное - найти НОК(N,M), но это на самом деле просто, зная, что НОД(N,M)*НОК(N,M) = N*M, где НОД - наибольший общий делитель. Тогда достаточно найти НОД(N,M) и разделить N*M на этот НОД. Причем НОД находится за линейное время алгоритмом Евклида.
источник

O

Oleg in Delphi & Lazarus
Доказательство того, что меньшим количеством заездов обойтись не получится: каждый гонщик в общий список результатов вносит целое количество своих результатов, значит, общее число результатов должно делиться на количество гонщиков. С другой стороны, за каждый заезд в таблицу вносится количество результатов, равное количеству участников одного заезда. Следовательно, общее количество результатов должно делиться без остатка и на количество гонщиков вообще, и на количество гонщиков в одном заезде. Минимальным таким числом является наименьшее общее кратное.
источник

N

Nik in Delphi & Lazarus
Oleg
А как в уникальную пару выбирать третьего? А если участников одного заезда будет не три, а четыре? На самом деле, мое решение через НОК даёт одновременно два результата: 1) доказательство минимальности 2) порядок построения турнирной таблицы для любых N и M хоть по сценарию, когда не требуется сравнение каждого с каждым, хоть по сценарию, когда требуется. Насчёт порядка построения в первом случае (полнота сравнений не требуется): берется одномерный массив длиной НОК (N,M) и заполняется последовательностями чисел от 1 до N. Таких последовательностей в этот массив поместится целое количество (по определению НОК). Далее берём первые M элементов этого массива - это номера участников первого заезда; вторые M элементов - номера участников второго заезда и т.д. Так как НОК длится на M, сформированные заезды будут полными (в каждом по M участников). Оценка сложности алгоритма - O(M*N) как по времени, так и по памяти. Самое сложное - найти НОК(N,M), но это на самом деле просто, зная, что НОД(N,M)*НОК(N,M) = N*M, где НОД - наибольший общий делитель. Тогда достаточно найти НОД(N,M) и разделить N*M на этот НОД. Причем НОД находится за линейное время алгоритмом Евклида.
Невнимательно читаешь сообщения. Из общего списка удаляешь одного любого участника и из оставшихся уникальные пары формируешь. Добавлением к этим парам удалённого участника получаешь тройки для раундов. Они тоже уникальными будут.
источник

N

Nik in Delphi & Lazarus
А про 4 участника в заезде речи не шло в задании.
источник

O

Oleg in Delphi & Lazarus
Nik
Невнимательно читаешь сообщения. Из общего списка удаляешь одного любого участника и из оставшихся уникальные пары формируешь. Добавлением к этим парам удалённого участника получаешь тройки для раундов. Они тоже уникальными будут.
Тоже невнимательно читаешь. Как будешь знать, кого ты удалил и кого вернуть?
источник

O

Oleg in Delphi & Lazarus
Nik
А про 4 участника в заезде речи не шло в задании.
Завтра они переедут на другую площадку с четырьмя полосами и кранты решению для частного случая.
источник

O

Oleg in Delphi & Lazarus
Тем более, что решение в общем случае расписано и несложное.
источник

N

Nik in Delphi & Lazarus
Oleg
Тоже невнимательно читаешь. Как будешь знать, кого ты удалил и кого вернуть?
Первого попавшегося. Это не принципиально. Там просто важен факт, что участник не может сам с собой соревноваться.
источник

N

Nik in Delphi & Lazarus
Oleg
Завтра они переедут на другую площадку с четырьмя полосами и кранты решению для частного случая.
Про частный случай согласен. Только заполнение расписания один фиг через уникальные тройки делать придётся. Посчитать количество раундов ты посчитаешь, а само расписание же ты не получишь.
источник

O

Oleg in Delphi & Lazarus
Получу, я написал, как именно - через одномерный массив длиною НОК (N,M)
источник

O

Oleg in Delphi & Lazarus
Nik
Первого попавшегося. Это не принципиально. Там просто важен факт, что участник не может сам с собой соревноваться.
И если первый попавшийся всегда будет один и тот же? Условие равенства количества заездов может нарушиться, потребуется дополнительный контроль.
источник

N

Nik in Delphi & Lazarus
Oleg
Получу, я написал, как именно - через одномерный массив длиною НОК (N,M)
Попробуй его заполнить
источник

O

Oleg in Delphi & Lazarus
1,2,3,...8,9,10,1,2,3,...8,9,10,1,2,3,...8,9,10
источник

O

Oleg in Delphi & Lazarus
Тридцать элементов.
источник

O

Oleg in Delphi & Lazarus
В первый заезд идут 1,2,3, во второй - 4,5,6, в третий - 7,8,9, в четвертый - 10,1,2
источник