Вычислить сколько неудачных пятниц в году - C (СИ)
Формулировка задачи:
#include <stdio.h> #include <stdlib.h> main() { long y,y1,y2,y3,i,i2; int m,m1,a; signed long mas[12]; for(i=0;i<=12;i++) mas[i]=0; scanf("%d%d",&y1,&y2); i2=0; for(y=y1;y<=y2;y++){ for(m=1;m<=12;m++){ a=(14-m)/12; y3=y-a; m1=m+12*a-2; d=(7000+(13+y3+y3/4-y/100+y3/400+(31*m1)/12))%7; if(d==5) i2=i2+1; } mas[i2]=mas[i2]+1; i2=0; } for(i=0;i<=12;i++){ printf("%d:%d\n",i,mas[i]);; } return 0; }
Решение задачи: «Вычислить сколько неудачных пятниц в году»
#include <stdio.h> #include <string.h> int countweekdays (int year0, int weekday, int day) { //Сколько раз в году year0 (4 цифры) //встречался день недели weekday (0=Сб,1=Вс,...,6=Пт) //для числа day (1-31) int count=0,year,month; for (int m=1; m<13; m++) { if (m<3) { month=m+12; year=year0-1; } else { month=m; year=year0; } int c=year/100,y=year%100,wd=( (month+1)*26/10+day+y+y/4+c/4-2*c ) % 7; if (wd == weekday) count++; } return count; } int main() { printf ("\n%d",countweekdays(2015,6,13)); //проверка: в 2015 году "пятница 13-е" встречалась трижды getchar(); return 0; }
Объяснение кода листинга программы
В этом коде определена функция countweekdays, которая принимает три аргумента: year0, weekday и day. Функция считает, сколько раз в году (год, представленный четырьмя цифрами) встречался день недели (представленный целым числом от 0 до 6, где 0 соответствует субботе, а 6 - пятнице). Для этого в цикле перебираются все месяцы от 1 до 12 (включительно). Если номер месяца меньше 3, то к нему добавляется 12, и он считается за год, который был до текущего (это связано с тем, что в григорианском календаре годы, оканчивающиеся на два нуля, являются високосными, и в них 29 февраля). В противном случае месяц считается как текущий. Затем вычисляется день недели для текущей даты (по формуле, приведенной в коде). Если день недели совпадает с заданным, то к счетчику неудачных пятниц добавляется единица. В конце функция возвращает общее количество неудачных пятниц.
В функции main() вызывается функция countweekdays с аргументами 2015, 6 и 13 (год, день недели пятница и день месяца). Результат выводится на экран. В данном случае функция вернула число 3, что означает, что в 2015 году пятница 13-е
встречалась трижды.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д