Вычислить сколько неудачных пятниц в году - C (СИ)

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

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

Для каждого k от 0 до 12 выведите, сколько раз за период, охваченный в реферате Васи, встретился год, в котором было ровно k неудачных пятниц Не могу понять в чем ошибка. При отправке задачи на тимус выбивает ошибку на 3 тесте (Wrong answer).
#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; 
}

Решение задачи: «Вычислить сколько неудачных пятниц в году»

textual
Листинг программы
#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-е встречалась трижды.

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


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

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

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