刚开始学习,打代码出现问题,希望可以得到帮助

13号又是星期五是一个不寻常的日子吗? 13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13 日落在星期一,星期二星期日的次数.这个测试从1900年1月1日到 1900+n-1年12月31日.n是一个非负数且不大于400. 这里有一些你要知道的: 1900年1月1日是星期一. 4,6,11和9月有30天.其他月份除了2月有31天.闰年2月有29天,平年2月有28天. 年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年) 以上规则不适合于世纪年.可以被400整除的世纪年为闰年,否则为平年.所以,1700,1800,1900和2100年是平年,而2000年是闰年. 请不要预先算好数据!

输入
一个整数n

输出
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一.星期五的次数

样例输入
20

样例输出
36 33 34 33 35 35 34

#include<stdio.h>
int leap_year(int year) {
    if ((year % 4 == 0 || year % 400 == 0) && year % 100 != 0) return 1;
    else return 0;
}
int main() {
    int n;
    scanf_s("%d",&n);
    int month_Day[2][12] = { {31,28,31,30,31,30,31,31,30,31,30,31},
                             {31,29,31,30,31,30,31,31,30,31,30,31} };
    int week[20] = {0}, wek = 1;
    wek = 6;
    week[wek]++;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == (n-1)&&j == 11) { j++; continue; }
            else {
                wek = (wek + (month_Day[leap_year(1900 + i)][j]%7))%7;
                week[wek]++;
            }
        }
    }
    printf("%d", week[6]);
    printf(" %d", week[0]);
    for (int i = 1; i <= 5; i++) {
        printf(" %d", week[i]);
    }
    return 0;
}

学校里的OJ只有错误78%,我也不清楚是什么条件上考虑不周

供参考:

#include <stdio.h>

int get_Week(int y,int m,int d)
{
    int week = 0;
    if(m==1 || m == 2){
       m += 12;y--;
    }
    week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
    return week;
}

int main()
{
    int y,m,n;
    int cdofc[7]={0}; //[0~6]:周一  --  周日)
    scanf("%d",&n);
    for(y=1900,m=1; y<1900+n; m++,m>12?(m=1,y++):m)
                       cdofc[get_Week(y,m,13)]++;
    printf("%d %d %d %d %d %d %d\n",cdofc[5],cdofc[6],cdofc[0],
                           cdofc[1],cdofc[2],cdofc[3],cdofc[4]);
    return 0;
}

你自己能准备一些测试数据来测试么?

谢谢!不过也由于我是个憨批,我判断闰年的时候写错了

判断闰年:

int isLeap(int y)
{
    if((y%4==0 && y%100!=0)||(y%400==0))
        return 1;
    else
        return 0;
}