Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
1

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

18.10.2009, 16:08. Просмотров 4054. Ответов 11
Метки нет (Все метки)

Доброго времени суток. Кто чем может помогите, либо направьте в нужное русло. Вот такая вот задачка у меня:

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

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

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

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

ВЫХОД:
1 тур
ЦСКА – Зенит
Динамо – Спартак
-------------------------------------
2 тур
Зенит – Динамо
Спартак – ЦСКА
-------------------------------------
3 тур
ЦСКА – Динамо
Зенит – Спартак
-------------------------------------
4 тур
Динамо – Зенит
ЦСКА – Спартак
-------------------------------------
5 тур
Спартак – Динамо
Зенит – ЦСКА
-------------------------------------
6 тур
Динамо – ЦСКА
Спартак – Зенит
-------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2009, 16:08
Ответы с готовыми решениями:

Составление суточного расписания
Известно время начала и окончания работы некоторого пригородного автобусного...

Таблица футбольного чемпионата
Всем привет, нужна помощь. Таблица футбольного чемпионата задана в виде...

Жеребьевка футбольного чемпионата
Хочу написать программу для расчета, допустим, футбольных матчей Что должно...

Таблица футбольного чемпионата
Ребята! Пожалуйста помогите в Turbo C++ сделать! Очень прошу... Таблица...

Задание на двумерный массив: Таблица футбольного чемпионата
Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой ...

11
odip
Эксперт С++
7162 / 3221 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
18.10.2009, 19:53 2
Если N - число команд, то общее число встреч равно 2*(N-1)!
В данном случае N=4, встреч=2*3!=12
Понятно что в одном туре может быть только N/2 игр.
Значит будет 6 туров.
Задача аккуратно сгенерировать все варианты встреч.
0
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
18.10.2009, 19:55  [ТС] 3
а можешь на примере?
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 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 здесь будут являться индексами для массива со списком команд
0
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
18.10.2009, 20:23  [ТС] 5
а если команды записывать в каждую строчку, то тогда что делать?
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
18.10.2009, 20:27 6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Создаем список команд в массиве
Здесь я имел ввиду, что создаем массив размером = количеству команд
Затем заполняем его из входного файла.
0
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
18.10.2009, 21:04  [ТС] 7
может кому не трудно напишите код?
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 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()
1
SPV
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 10
19.10.2009, 06:51  [ТС] 9
небольшая корректировочка
C++
1
input.close(); output.close();
точку с запятой ещё надо поставить
а так спасибо огромное!
0
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
19.10.2009, 13:22 10
Цитата Сообщение от SPV Посмотреть сообщение
точку с запятой ещё надо поставить
Это я набегу дописывал.
0
anime
0 / 0 / 0
Регистрация: 08.06.2010
Сообщений: 9
10.06.2010, 11:23 11
мне надо создать расписание на Java.Задача такая: Разработать программу для работы с БД, которая обеспечивает автоматизированную продажу авиабилетов на месяц вперед. Программа проверяет правильность каждой даты, делает возможным менять расписание. В типизированных файлах хранятся входные данные: номера рейсов, маршруты, количество свободных мест, дата вылета, ФИО.
При введении нового пункта расписания не разрешается вводить прошедшую дату (дата на данный момент времени высвечивается).
При покупке билета также проверяется дата и номер рейса. Не разрешается покупать билеты более, чем на месяц вперед.
заранее спасибо
0
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
10.06.2010, 11:24 12
anime, Java?
Вам сюда: http://www.cyberforum.ru/java/
0
10.06.2010, 11:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2010, 11:24

Таблица футбольного чемпионата задана квадратной матрицей порядка N
Привет, дана такая задача: Таблица футбольного чемпионата задана квадратной...

Анализ расписания докладов на конференции
Работа научной конференции обычно разделена на несколько одновременно...

Генетический алгоритм для составления расписания
В генетическом алгоритме для составления расписаний что берется в качестве...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru