Exemplo n.º 1
0
        /// <summary>
        /// Рекурсивный метод записи данных в файл
        /// </summary>
        /// <param name="num_group">one group at the moment</param>
        /// <param name="groups">total groups</param>
        /// <param name="number">user value</param>
        public static void Recursion(int num_group, int groups, int number)
        {
            List <int> myList = Perebor(num_group, number);

            FileProcess.Write(myList, num_group);
            if (num_group + 1 < groups)
            {
                Recursion(num_group + 1, groups, number);
            }
            else
            {
                return;
            }
        }
Exemplo n.º 2
0
 static void Main(string[] args)
 {
     #region Homework
     /// Домашнее задание
     ///
     /// Группа начинающих программистов решила поучаствовать в хакатоне с целью демонстрации
     /// своих навыков.
     ///
     /// Немного подумав они вспомнили, что не так давно на занятиях по математике
     /// они проходили тему "свойства делимости целых чисел". На этом занятии преподаватель показывал
     /// пример с использованием фактов делимости.
     /// Пример заключался в следующем:
     /// Написав на доске все числа от 1 до N, N = 50, преподаватель разделил числа на несколько групп
     /// так, что если одно число делится на другое, то эти числа попадают в разные руппы.
     /// В результате этого разбиения получилось M групп, для N = 50, M = 6
     ///
     /// N = 50
     /// Группы получились такими:
     ///
     /// Группа 1: 1
     /// Группа 2: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
     /// Группа 3: 4 6 9 10 14 15 21 22 25 26 33 34 35 38 39 46 49
     /// Группа 4: 8 12 18 20 27 28 30 42 44 45 50
     /// Группа 5: 16 24 36 40
     /// Группа 6: 32 48
     ///
     /// M = 6
     ///
     /// ===========
     ///
     /// N = 10
     /// Группы получились такими:
     ///
     /// Группа 1: 1
     /// Группа 2: 2 7 9
     /// Группа 3: 3 4 10
     /// Группа 4: 5 6 8
     ///
     /// M = 4
     ///
     /// Участники хакатона решили эту задачу, добавив в неё следующие возможности:
     /// 1. Программа считыват из файла (путь к которому можно указать) некоторое N,
     ///    для которого нужно подсчитать количество групп
     ///    Программа работает с числами N не превосходящими 1 000 000 000
     ///
     /// 2. В ней есть два режима работы:
     ///   2.1. Первый - в консоли показывается только количество групп, т е значение M
     ///   2.2. Второй - программа получает заполненные группы и записывает их в файл используя один из
     ///                 вариантов работы с файлами
     ///
     /// 3. После выполения пунктов 2.1 или 2.2 в консоли отображается время, за которое был выдан результат
     ///    в секундах и миллисекундах
     ///
     /// 4. После выполнения пунта 2.2 программа предлагает заархивировать данные и если пользователь соглашается -
     /// делает это.
     ///
     /// Попробуйте составить конкуренцию начинающим программистам и решить предложенную задачу
     /// (добавление новых возможностей не возбраняется)
     ///
     /// * При выполнении текущего задания, необходимо документировать код
     ///   Как пометками, так и xml документацией
     ///   В обязательном порядке создать несколько собственных методов
     #endregion
     int number = WorkProcess.Number();
     if (number == 0)
     {
         Console.WriteLine("Число должно быть больше нуля");
         Console.ReadKey();
         return;
     }
     int       select    = WorkProcess.SelectWork("work mode");
     int       groups    = Convert.ToInt32(Math.Floor(Math.Log(number, 2) + 1)); //расчёт количества M групп
     Stopwatch stopWatch = new Stopwatch();
     stopWatch.Start();
     if (select == 1)
     {
         OutPut.OutputConsole(groups);
     }
     else
     {
         WorkProcess.Recursion(0, groups, number);
     }
     stopWatch.Stop();
     TimeSpan ts = stopWatch.Elapsed; //подсчёт времени работы операций
     OutPut.OutTimespan(ts);
     int archiveselect;
     if (select == 2)
     {
         archiveselect = WorkProcess.SelectWork("archive");
         if (archiveselect == 1)
         {
             FileProcess.Archive();
         }
     }
     Console.WriteLine("Завершено!");
     Console.ReadKey();
 }