Неделя с двумя понедельниками :)
Вышло так в связи с переездом 30-го апреля на 28-е. Если работа зависит от дня недели, то весело, как мне. Зато потом чуть не неделя одних суббот.
Судя по моему календарику, в этом году 247 рабочих дней и 118 выходных + праздничных.
Отнимите от количества рабочих дней пусть даже 20 дней 4-недельного оплачиваемого отпуска (а у многих больше) и получите соотношение 227 к 138, то есть, почти 40% бездельных дней, прямо как в моём шуточном "расследовании" о том, сколько мы работаем на самом деле.
А кто будет на бомбёжки Сирии и чемпионаты по футболу президенту зарабатывать?
Учитывая, что "загнивающий Запад" давно поговаривает о 4-дневной рабочей неделе, пора и в нашем заповеднике её вводить. Отпуска, конечно, нужно отменить, тем более, что при достижении final level они становятся явно не нужны, Юрьев день же в царской России в итоге был отменён!..
В общем, сколько в году дней с понедельника по четверг включительно?
Найти это не сложней, чем количество чёрных пятниц, и формулу наверняка можно вывести сложности O(1), только лень. А перебором, конечно, минутное дело.
Получать день недели "стандартно" через <ctime>
, мне кажется, имеет смысл только в том случае, если вы уверены, для какого интервала лет вам это нужно.
Скажем, стандартный пример вот отсюда теоретически должен работать для дат с 1900 года, практически же он в моём Studio объявил пятницей взятый для пробы понедельник 21 октября 1940.
В общем, локаль для старых дат - бяка, старого доброго Зеллера никто не отменял.
Мы его здесь ещё упростим, чтобы была в блоге getWeekDay
на C++, а программка получится такой:
//Visual Studio 2015 #include <iostream> using namespace std; unsigned int getWeekDay (unsigned int d, unsigned int m, unsigned int y) { //День недели, без проверки корректности даты if (m < 3) { m += 12; --y; } unsigned int N1 = (26 * (m + 1)) / 10; unsigned int N2 = (125 * y) / 100; unsigned int N3 = d + N1 + N2 - (y / 100) + (y / 400) - 1; return N3 % 7; //0==Вс,1==Пн...,6==Сб } unsigned int count (unsigned int year) { //Сколько в году year дней с Пн по Чт включительно unsigned int cnt = 0; int mondays[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) mondays[1] = 29; int wkd = getWeekDay (1,1,year); for (unsigned int m = 1; m <= 12; m++) { for (unsigned int d = 1; d <= mondays[m - 1]; d++) { if (wkd>0 && wkd<5) cnt++; wkd = getWeekDay(d, m, year); } } return cnt; } int main() { cout << count(2018); //209 cin.ignore(); return 0; }
Видно, что в текущем году 209 дней с week day от понедельника до четверга включительно. Это более 57% рабочих дней, то есть, отдыха остаётся даже больше (около 43% дней), а скрепы соблюдены :)
Ну да ладно, у меня-то не 4-дневка, пора дальше за дела, а то понедельник завтра :)
27.04.2018, 17:36 [2066 просмотров]