Какое максимальное количество рабочих дней в году? Как бы вы это написали? - PullRequest
6 голосов
/ 27 марта 2009

Чтобы выделить достаточно места для элемента массива для каждого дня недели в году, я пытаюсь определить максимальное количество строк, которое мне потребуется. Это привело меня к вопросу о том, как я это решу.

Нужно ли рассчитывать количество дней в каждом году для следующих n лет и продолжать? Или есть (как я подозреваю) более элегантное решение, включающее числа 365, 366, 2 и 7?

Какие библиотеки помогут?

Ответы [ 5 ]

23 голосов
/ 27 марта 2009

Максимальное количество дней в году - 366, что дает нам 52 полных недели. В эти 52 недели минимум 52 * 5 = 260 рабочих дней.

У нас осталось 2 дня (52 * 7 = 364), возможно, эти 2 дня являются рабочими днями.

Таким образом, максимальное количество рабочих дней в году составляет 262.

11 голосов
/ 27 марта 2009

Первое, что нужно помнить, это то, что в году существует только 14 возможных шаблонов дней: два для каждого дня недели (один для високосного года, один для не високосного года).

Второе, что нужно помнить, это то, что первые 364 дня в году не имеют значения, потому что это кратно 7 (и, следовательно, в первые 364 дня всегда 5 x 52 = 260 рабочих дней).

То есть вы заботитесь только о последних 1-2 днях.

Они оба могут быть рабочими днями, поэтому ответ на вопрос - 262.

Если вы хотите, чтобы быстрый алгоритм вычислял количество рабочих дней в любом конкретном году, вам просто нужно придумать формулу, которая превращает год в правильный год. Это не должно быть слишком сложно, учитывая, что високосные годы предсказуемы.

5 голосов
/ 27 марта 2009

Ответы cletus и GvS математически верны, но мне интересно, если вы делаете слишком много усилий. Если вам просто нужно убедиться, что ваш массив достаточно большой, рассчитайте 53 недели с 5 рабочими днями, то есть 265 дней. Поскольку год всегда равен 52, а доля недельной продолжительности, просто округление до следующего целого числа всегда даст вам достаточно элементов.

Если ваши элементы массива не слишком велики в потреблении памяти, вы можете жить с небольшим количеством отходов из-за элементов, которые вы никогда не будете использовать. Достаточно хорошо, достаточно хорошо.

И вы сэкономите не менее 10 минут, разрабатывая точное решение (ну, это то, что мне, вероятно, понадобится, по крайней мере ;-), которое вы можете потратить на кодирование.

3 голосов
/ 01 февраля 2010

По данным этого сайта

http://kalender -365.de / weekdays.php

В период с 1 февраля 2012 года по 1 февраля 2013 года число рабочих дней составляет 263, что превышает максимально допустимое значение 262, заявленное выше.

0 голосов
/ 27 марта 2009

Вот как можно рассчитать точное количество дней недели в конкретном году, используя C # (.NET Framework):

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // in which year which should count week days
            var year = DateTime.Now.Year;

            // first day of this year
            var date = new DateTime(year, 1, 1);

            var count = 0;

            // if date is still within our year, proceed
            while (date.Year < year + 1)
            {
                if (date.DayOfWeek == DayOfWeek.Monday ||
                    date.DayOfWeek == DayOfWeek.Tuesday ||
                    date.DayOfWeek == DayOfWeek.Wednesday ||
                    date.DayOfWeek == DayOfWeek.Thursday ||
                    date.DayOfWeek == DayOfWeek.Friday)
                {
                    count++;
                }
                date.AddDays(1);
            }

            Console.Write(count);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...