40 / 41 / 13
Регистрация: 10.08.2016
Сообщений: 310
1

Комбинаторика. Расписание школы

20.06.2018, 12:26. Показов 1044. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый! Задача такая. Класс 11а должен учит 35 часов в недели (6 дней. Воскр. выходной ). В день максимум 5 часов. Предметы:

"Matematika"-4 часа в нед ,"Fizika"-4 часов ,"Rusi"- 2 часов, "Anglisi"-2 час , "Naqsha"-2 часа,
"Biologiya"-2 часа ,"Himiya"-2 часов , "Botanika" -2 часов, "Adabiyot"-3 часов,
"Zabon-3 часов", "Huquq"-3 часов, "TXT"-2 часов,"TDQ"- 4.

Работаю в языке C#. Создал вот такой класс:
C#
1
2
3
4
5
6
7
8
  class Class
    {
        public string Name { get; set; }
        public Dictionary<string,int> Subjects { get; set; }
        public int MaxHoursInDay { get; set; }
        public int MaxHoursInWeek { get; set; }
 
    }
Далее заполняю данные :
C#
1
2
3
4
5
6
7
8
9
    Class _class = new Class();
            _class.Name = "11 a";
            _class.MaxHoursInDay = 5;
            _class.MaxHoursInWeek = 35;
            _class.Subjects = new Dictionary<string, int>();
            _class.Subjects.Add("Matematika", 4);
            _class.Subjects.Add("Fizika", 4);
            _class.Subjects.Add("Rusi", 2);
            ...
Теперь нужно сгенерировать все возможные варианты составление расписание. Есть ли какая нибуд формула или алгоритм решение задачи?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2018, 12:26
Ответы с готовыми решениями:

Расписание на основе базы данных школы
Всем привет! Делаю базу данных школы. Застряла на расписании. Нужно сделать, чтобы учитель мог...

Создать расписание занятий для школы танцев в 1С
Здравствуйте. Мне задали задание создать расписание занятий для школы танцев в 1с. Необходимо...

Как создать программу составления расписание для школы?
Здравствуйте, помогите пожалуйста, как создать программу составления расписание для школы. На делфи...

Нужно написать программу "расписание для школы"
Нужно написать программу на c#. Расписание в форме таблицы. Самостоятельно вводим данные (предмет,...

8
6818 / 4881 / 2061
Регистрация: 02.02.2014
Сообщений: 13,035
20.06.2018, 12:31 2
Цитата Сообщение от Dilshod Komilov Посмотреть сообщение
учит 35 часов в недели (6 дней. Воскр. выходной ). В день максимум 5 часов.
5 часов (максимум) на 6 дней = 30 часов максимум, еще 5 часов куда деть?
0
40 / 41 / 13
Регистрация: 10.08.2016
Сообщений: 310
20.06.2018, 14:18  [ТС] 3
Цитата Сообщение от Krasme Посмотреть сообщение
В день максимум 5 часов.
Вышла ошибочка . В день максимум 6 часов
0
40 / 41 / 13
Регистрация: 10.08.2016
Сообщений: 310
22.06.2018, 08:29  [ТС] 4
Krasme, Помоч сможете ?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,037
22.06.2018, 10:49 5
Делаем массив размера 35
Каждому предмету ставим в соответствие определенное число.
Записываем в массив эти числа согласно количеству часов.

А теперь решаем типичную задачу поиска всех перестановок с условием что в входных данных есть повторы.

Добавлено через 6 минут
из каждой такой перестановки также генерируем еще 6 разных расписаний с условием что у нас получается что один день будет 5 часов, а все остальные - 6 часов
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
22.06.2018, 11:58 6
Предположу, что есть ещё какие-то ограничения. Например, нельзя все 4 математики поместить в один день.
0
40 / 41 / 13
Регистрация: 10.08.2016
Сообщений: 310
22.06.2018, 13:04  [ТС] 7
Я думаю мне достаточно узнать как сгенерировать все возможные варианты этих предметов в день. (То есть есть 10 пердметов. В один день 5 уроков. Сгенерировать все варианты). Помогите составит метод
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
22.06.2018, 16:54 8
Цитата Сообщение от Dilshod Komilov Посмотреть сообщение
Я думаю мне достаточно узнать как сгенерировать все возможные варианты этих предметов в день.
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
void Main()
{
    var items = "abcd".ToCharArray();
    var len = 3;
    Permutations(items, len);
}
 
void Permutations(char[] items, int len)
{
    var a = Enumerable.Range(0, len).Reverse().ToArray();
    do
    {
        Print(a, items);
    }
    while (Next(a, items));
}
 
void Print(int[] a, char[] items)
{
    var s = new string(a.Select(x => items[x]).Reverse().ToArray());
    Console.WriteLine(s);
}
 
bool Next(int[] a, char[] items)
{
    // перебираем позиции и пробуем увеличить цифру
    for (int i = 0; i < a.Length; i++)
    {
        // увеличиваем цифру на единицу, пока не получим подходящую
        for (int j = a[i] + 1; j < items.Length; j++)
        {
            if (Used(a, i + 1, j))
                continue; // используется слева от данной позиции   
            // подходит 
            a[i] = j;
            // заполняем младшие разряды самыми маленькими неиспользованными цифрами
            for (int l = i - 1, k = 0; l >= 0; l--)
            {
                while (Used(a, i, k))
                    k++;
                a[l] = k++;
            }
            return true;
        }
    }
    // не удалось увеличить цифру ни в одной из позиций
    return false;
}
 
bool Used(int[] a, int pos, int n)
{
    for (int i = pos; i < a.Length; i++)
        if (a[i] == n)
            return true;
    return false;
}
1
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,037
25.06.2018, 13:18 9
Цитата Сообщение от Dilshod Komilov Посмотреть сообщение
Я думаю мне достаточно узнать как сгенерировать все возможные варианты этих предметов в день. (То есть есть 10 пердметов. В один день 5 уроков. Сгенерировать все варианты).
Расписание есть "существо" цельное в рамках недели. Нельзя просто взять и генерировать перестановки на каждый день независимо от других, да и если делать зависимо - это потребует, думаю, написать больше строк чем делать перестановки сразу на неделю, а потом разбивать по дням.

Код
Заполнить массив <урок[35]> начальными данными
ПОВТОРЯТЬ
for (i=0; i<6; i++)
  shift = 0
  for (j=0; j<6; j++)  
    if i==j
      день[j] = урок[shift]...урок[shift+4]
      shift += 5
    else
      день[j] = урок[shift]...урок[shift+5]
      shift +=6
  Напечатать расписание из массива <день[6]>
  <урок[35]> = Новая_Перестановка( <урок[35]> )
ПОКА есть новые перестановки
0
25.06.2018, 13:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2018, 13:18
Помогаю со студенческими работами здесь

Составить программу "расписание школы"
Скиньте программку , который строит расписание для школы если ест.

Разработка БД "Расписание для школы"
Доброго времени суток. Имеется вопрос по созданию базы данных на языке С++. Задача - разработать...

По номеру школы, задаваемому в одной из ячеек, получать в другой ячейке фамилию и инициалы директора этой школы
Известны фамилии и инициалы директоров каждой из 24 школ. Оформить лист таким образом, чтобы можно...

Железнодорожное расписание или расписание электричек на Java в среде NetBeans
помогите пожалуйста сделать программку нужно сделать железнодорожное расписание или расписание...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru