Форум программистов, компьютерный форум CyberForum.ru

Автоматическое составление расписания чемпионата - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
18.10.2009, 16:08     Автоматическое составление расписания чемпионата #1
Доброго времени суток. Кто чем может помогите, либо направьте в нужное русло. Вот такая вот задачка у меня:

Чемпионат проводится по двух круговой системе (каждый с каждым).
В каждом туре участвуют все команды, если их четное количество, или одна команда отдыхает.
В каждом туре команда проводит только 1 игру.
Пара команд, которая уже встречалась, может сыграть только во втором круге, поменявшись полями (например ЦСКА – Зенит -> Зенит – ЦСКА).

Входные данные:
Текстовый файл содержит названия команд (от 4 до 20, количество может быть четным и нечетным).

Выходные данные:
Расписание (выходной текстовый файл) имеет следующую структуру:
Строка с номером тура
Несколько строк с парами команд, разделенных « – ».

Пример:
ВХОД:
ЦСКА
Зенит
Спартак
Динамо

ВЫХОД:
1 тур
ЦСКА – Зенит
Динамо – Спартак
-------------------------------------
2 тур
Зенит – Динамо
Спартак – ЦСКА
-------------------------------------
3 тур
ЦСКА – Динамо
Зенит – Спартак
-------------------------------------
4 тур
Динамо – Зенит
ЦСКА – Спартак
-------------------------------------
5 тур
Спартак – Динамо
Зенит – ЦСКА
-------------------------------------
6 тур
Динамо – ЦСКА
Спартак – Зенит
-------------------------------------
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7224 / 3286 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
18.10.2009, 19:53     Автоматическое составление расписания чемпионата #2
Если N - число команд, то общее число встреч равно 2*(N-1)!
В данном случае N=4, встреч=2*3!=12
Понятно что в одном туре может быть только N/2 игр.
Значит будет 6 туров.
Задача аккуратно сгенерировать все варианты встреч.
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
18.10.2009, 19:55  [ТС]     Автоматическое составление расписания чемпионата #3
а можешь на примере?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.10.2009, 20:18     Автоматическое составление расписания чемпионата #4
Предлагаю вариант: например команд 4
Создаем список команд в массиве
Создаем массив:
индексы 0 1 2 3
0 -1 0 0 0
1 0 -1 0 0
2 0 0 -1 0
3 0 0 0 -1
После первого прохода:
индексы 0 1 2 3
0 -1 1 0 0
1 0 -1 0 0
2 0 0 -1 1
3 0 0 0 -1
Условие изменения значений массива будет чтобы индексы не повторялись
После второго прохода
индексы 0 1 2 3
0 -1 1 2 0
1 0 -1 0 2
2 0 0 -1 1
3 0 0 0 -1
После третьего прохода
индексы 0 1 2 3
0 -1 1 1 3
1 0 -1 3 1
2 0 0 -1 1
3 0 0 0 -1
ну и т.д.
а потом только остается:
Первый тур: (ищем элементы массива равные 1)
если i>j то Зенит - ЦСКА, если i<j то ЦСКА-Зенит
Для второго тура элементы равные 2 и т.д.
i и j здесь будут являться индексами для массива со списком команд
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
18.10.2009, 20:23  [ТС]     Автоматическое составление расписания чемпионата #5
а если команды записывать в каждую строчку, то тогда что делать?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.10.2009, 20:27     Автоматическое составление расписания чемпионата #6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Создаем список команд в массиве
Здесь я имел ввиду, что создаем массив размером = количеству команд
Затем заполняем его из входного файла.
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
18.10.2009, 21:04  [ТС]     Автоматическое составление расписания чемпионата #7
может кому не трудно напишите код?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.10.2009, 06:12     Автоматическое составление расписания чемпионата #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string *sp_kom;
int **mas, n, i,j, tur;
bool *kom, temp, y;
int main ()
{
    ifstream input("in_file.txt");
    ofstream output("out_file.txt");
    input>>n; 
    mas=new int*[n]; 
    for(i=0; i<n; i++)
       mas[i]=new int[n];
    kom=new bool[n];
    sp_kom=new string[n];
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
           mas[i][j]=0;
    for(i=0; i<n; i++)
    {
        input>>sp_kom[i];
        kom[i]=false;
        mas[i][i]=-1;
    }
    temp=true;
    tur=1;
    y=true;
    while(temp)
    {       
        temp=false;
        for(i=0; i<n; i++)
            kom[i]=false;
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
                if(mas[i][j]==0 && !kom[i] && !kom[j])
                {
                    if(y)
                    {
                        output<<tur<<"  ГІГіГ°"<<endl;
                        y=false;
                    }
                    mas[i][j]=-1;
                    kom[i]=kom[j]=true;
                    temp=true;
                    if(i>j)
                        output<<sp_kom[i]<<" - "<<sp_kom[j]<<endl;
                    else
                        output<<sp_kom[j]<<" - "<<sp_kom[i]<<endl;
                }
        if(temp)
            output<<"---------------------"<<endl;
        y=true;
        tur++;
    }
 
    return 0; 
}
Входной файл выглядит так (первое значение - кол-во команд, затем названия самих команд:
4
ЦСКА
Зенит
Спартак
Локомотив

Да, еще учтите что на экране ничего не увидите.

Добавлено через 12 минут
Немного упустил - в строке 57 моего кода вставьте:
C++
1
input.close(); output.close()
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
19.10.2009, 06:51  [ТС]     Автоматическое составление расписания чемпионата #9
небольшая корректировочка
C++
1
input.close(); output.close();
точку с запятой ещё надо поставить
а так спасибо огромное!
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.10.2009, 13:22     Автоматическое составление расписания чемпионата #10
Цитата Сообщение от SPV Посмотреть сообщение
точку с запятой ещё надо поставить
Это я набегу дописывал.
anime
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 9
10.06.2010, 11:23     Автоматическое составление расписания чемпионата #11
мне надо создать расписание на Java.Задача такая: Разработать программу для работы с БД, которая обеспечивает автоматизированную продажу авиабилетов на месяц вперед. Программа проверяет правильность каждой даты, делает возможным менять расписание. В типизированных файлах хранятся входные данные: номера рейсов, маршруты, количество свободных мест, дата вылета, ФИО.
При введении нового пункта расписания не разрешается вводить прошедшую дату (дата на данный момент времени высвечивается).
При покупке билета также проверяется дата и номер рейса. Не разрешается покупать билеты более, чем на месяц вперед.
заранее спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2010, 11:24     Автоматическое составление расписания чемпионата
Еще ссылки по теме:

C++ Жеребьевка футбольного чемпионата
C++ Составление суточного расписания
C++ Генетический алгоритм для составления расписания

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
10.06.2010, 11:24     Автоматическое составление расписания чемпионата #12
anime, Java?
Вам сюда: http://www.cyberforum.ru/java/
Yandex
Объявления
10.06.2010, 11:24     Автоматическое составление расписания чемпионата
Ответ Создать тему
Опции темы

Текущее время: 15:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru