Найти разбиение старушек на группы, разговорчивость которых минимальна - C#

Узнай цену своей работы

Формулировка задачи:

В этом году Иван Иванович решил отметить приход осени субботником, чтобы убрать весь мусор во дворе дома номер 31 по улице Осенней. На субботник он пригласил N знакомых старушек, живущих в том же самом доме. Однако, в самом начале мероприятия выяснилось, что по одиночке старушки работают плохо, так как им хочется во время работы еще и поговорить друг с другом. Иван Иванович подумал и принял волевое решение разбить старушек на группы так, чтобы в каждой группе было не менее 2 старушек. Старушки отличаются друг от друга уровнем разговорчивости, и если в одну группу попадут две старушки, у одной из которых маленький уровень разговорчивости, а у второй - большой, то они не могут поговорить друг с другом и работа будет стопориться. Назовем разговорчивостью группы разность между максимальным и минимальным уровнями разговорчивости старушек в группе. Например, если уровни разговорчивости старушек в группе равны 7, 3 и 11, то разговорчивость группы равна 11 - 3 = 8. Разговорчивостью разбиения старушек на группы назовем максимальную из разговорчивостей групп, входящих в разбиение. Требуется написать программу, которая поможет Ивану Ивановичу найти разбиение старушек на группы, разговорчивость которого минимальна.

Решение задачи: «Найти разбиение старушек на группы, разговорчивость которых минимальна»

textual
Листинг программы
using System;
 
class Program
{
    static void Main()
    {
        int N = 10;
        int[] volubility = new int[N];
        Random r = new Random();
 
        for (int n = 0; n < N; n++)
            Console.Write((volubility[n] = r.Next(0, 20)) + " ");
        Array.Sort(volubility);
 
        int serial = 1, maxGroupVol = 0, i = N - 2;
        while (true)
        {
            int curmin = 0, curmax = volubility[i + 1];
            bool minFound = false;
            Console.Write("\nGroup #{0}: {1} ", serial, curmax);
            for (; i > 0; i--)
            {
                if (volubility[i] == curmax)
                    Console.Write(curmax + " ");
                else if (!minFound)
                {
                    curmin = volubility[i];
                    minFound = true;
                    Console.Write(curmin + " ");
                }
                else if (volubility[i] != curmin)
                {
                    serial++;
                    break;
                }
                else if (volubility[i] == curmin)
                    Console.Write(volubility[i] + " ");
            }
 
            i--;
            if (i < 1) 
                Console.Write(curmin = volubility[0]);
            if (maxGroupVol < curmax - curmin)
                maxGroupVol = curmax - curmin;
            if (i < 1)
                break;
        }
 
        Console.WriteLine("\nMax volubility: " + maxGroupVol);
        Console.ReadKey();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы