Прошу помощи в решении задачи по php

Discussion in 'PHP' started by vorona, 15 Aug 2010.

  1. vorona

    vorona Member

    Joined:
    7 Sep 2009
    Messages:
    392
    Likes Received:
    7
    Reputations:
    1
    Есть 20 футбольных клубов.
    Есть 150 дней.

    Как составить календарь встреч этих клубов между собой на эти 150 дней? Календарь должен быть разбросан по этим 150 дням. Например, одна игра одного клуба может быть в первый, второй или третий день. Вторая игра одного клуба может быть в четвертый, пятый или шестой день. Третья игра одного клуба может быть в седьмой, восьмой или девятый день и т.д. до 150. Т.е. нужно рамдомно выбирать из 1,2,3 потом 4,5,6 потом 7,8,9 и т.д.

    Нужно учесть то, что клуб не может играть сам с собой и то, что игра бывает на выезде и дома. Пусть имена клубов будут от 1 до 20 (ихние id'ы в БД).
     
  2. vorona

    vorona Member

    Joined:
    7 Sep 2009
    Messages:
    392
    Likes Received:
    7
    Reputations:
    1
    Это получается 38 матчей для каждого клуба. Вот эти 38 матчей нужно раскидать на 150 дней чтобы хотя бы раз на 3 дня была одна игра у каждого клуба.
     
  3. vorona

    vorona Member

    Joined:
    7 Sep 2009
    Messages:
    392
    Likes Received:
    7
    Reputations:
    1
    Help me please. :(
     
  4. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    тебе помочь надо, или сделать за тебя? =) задавай конкретные вопросы по пхп, или пожалуйста в этот раздел /forum57.html =)
     
  5. vorona

    vorona Member

    Joined:
    7 Sep 2009
    Messages:
    392
    Likes Received:
    7
    Reputations:
    1
    Ну я, по-моему, задал конкретный вопрос: как с помощью php решить эту задачу? Помочь. Можно просто объяснить алгоритм работы и всё. Здесь кода на несколько строк. пару массивов и пару циклов.
     
    #5 vorona, 16 Aug 2010
    Last edited: 16 Aug 2010
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    vorona 1) делаете массив из всех пар матчей (получается 190 игр вроде) - это массив матчей
    2) создаете массив из 50 элементов (это массив блоков по 3 дня), каждый элемент массива состоит из 2 массивов, в первом будут храниться команды которые играют в этот блок, во втором - собственно матч, который играется в этот блок
    3) проходите по кругу все 50 элементов, пока в массиве матчей есть элементы
    3.1) Например берем 1 элемент массива блоков, выбираем случайный матч
    3.2) Проверяем первый элемент массива - играют ли эти команды в этот блок
    3.3) Если да - идем к пункту 3.1
    3.4) Если нет - добавляем этот матч во второй элемент массива
    3.5) Добавляем номера команд в первый элемент
    3.6) Удаляем этот матч из массива матчей
    3.7) Переходим к следующему элементу массива блоков, пока выполняется условие из 3
    4) Проходим по кругу все элементы массива блоков
    4.1) Дополняем второй элемент массива блоков до максимального числа игр в текущем блоке "пустыми" элементами (например может быть по 2 игры в день, то есть в блоке возможно 6 матчей)
    5) Проходим по кругу все элементы массива
    5.1) Перемешиваем второй элемент массива
    6) Перемешиваем массив блоков

    Итог - во втором элементе массива блоков будет храниться информация о текущих матчах. Например для первого блока получается:
    Code:
    1) Матч 1 против 5
    2) Матч 2 против 4
    3) Пусто
    4) Пусто
    5) Матч 13 против 12
    6) Пусто
    Это будет означать - в первый день в 17-00 играет "1 против 5", в первый день 19-00 играет "2 против 4", во второй день никто не играет, в третий день в 17-00 играет "13 против 12"
     
    _________________________
    1 person likes this.
  7. vorona

    vorona Member

    Joined:
    7 Sep 2009
    Messages:
    392
    Likes Received:
    7
    Reputations:
    1
    Gifts, большое спасибо! Пошел реализовывать.