ZCMU 2119: 任意年月日历

2018-07-24  本文已影响0人  littlefox_ca93

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
上一篇下一篇

猜你喜欢

热点阅读