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