美文网首页
ZCMU 2119: 任意年月日历

ZCMU 2119: 任意年月日历

作者: littlefox_ca93 | 来源:发表于2018-07-24 21:37 被阅读0次

    Time Limit: 1 Sec Memory Limit: 128 MB
    Submit: 94 Solved: 25

    Description

    已知2007年1月1日为星期一。
    设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
    为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。

    Input


    image.png

    Output

    Sample Input

    Sample Output

    image.png

    题解:

    主要找到当月的第一天是星期几,然后注意一下格式就不会有太大问题~需要注意空格和换行。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int year[2][13]=
    {
        {0,31,28,31,30,31,30,31,31,30,31,30,31},
        {0,31,29,31,30,31,30,31,31,30,31,30,31}
    };
    
    int dayofweek(int y,int m,int d)
    {
        static int t[]= {0,3,2,5,0,3,5,1,4,6,2,4};
        y-=m<3;
        return (y+y/4-y/100+y/400+t[m-1]+d)%7;
    }
    
    int main()
    {
        int y,m;
        scanf("%d%d",&y,&m);
    
        printf("Calendar %d-%02d\n",y,m);
        printf("---------------------\n");
        printf(" Su Mo Tu We Th Fr Sa\n");
        printf("---------------------\n");
    
        int k=(y%400==0||(y%4==0&&y%100!=0));
    
        int w=dayofweek(y,m,1);      //确定输入的那个月一号是星期几
    
        for(int i=0;i<w;i++)
                printf("   ");       //输入三个空格
    
        int flag=w;
    
        for(int i=1;i<=year[k][m];i++)
        {
            if(flag==7)
            {
                flag=0;
                puts("");
            }
            printf("%3d",i);
            flag++;
        }
    
        printf("\n---------------------");
        return 0;
    }
    
    
    image.png

    相关文章

      网友评论

          本文标题:ZCMU 2119: 任意年月日历

          本文链接:https://www.haomeiwen.com/subject/svzymftx.html