已知2007年1月1日为星期一。
设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。
样例输入:
2007 1
样例输出:
Calendar 2007-01
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
---------------------
2007 1
样例输出:
Calendar 2007-01
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
---------------------
样例输入:
2010 9
样例输出:
Calendar 2010-09
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
---------------------
2010 9
样例输出:
Calendar 2010-09
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
---------------------
注意:短线“-”个数要与题目中一致,否则系统会判为错误。
思路:把当月前的全部天数加起来%7即为开始天,具体程序如下,编程语言是C语言
//蓝桥杯 算法提高 任意年月日历输出
#include <stdio.h>
int main() {
int year, month, t;//t=1代表闰年
int Y = 2007, M = 1, D = 1 , W = 1;
int day=1; //默认天数为1
int i;
int j;
int k=1;
int d[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//每个月多少天
scanf("%d %d", &year, &month);
if(year<2007)return 0; //2007年之前的不输出
printf("---------------------\n");
printf(" Su Mo Tu We Th Fr Sa\n");
printf("---------------------\n");
// if(year % 4 == 0 && year % 100 != 0 || (year%400 == 0)) {
// t = 1;
// }
// else {
// t = 0;
// }
//上面的代码是判断是否闰年的
if(year==Y) { //如果年数相同
if(month==M) { //如果月数相同
day=1;
i=M;
}
else { //如果月数不相同
for(i = M; i < month; i++) {
day = day + d[i];
}
}
}
else { //如果年数不相同
for(i = Y; i < year; i++) { //把不包括这一年的天数加上
if((i % 4 == 0 )&& (i % 100 != 0) || (i % 400 == 0)) {
day = day + 366;
}
else {
day = day + 365;
}
}
if((i % 4 == 0 )&& (i % 100 != 0) || (i % 400 == 0)) {
d[2]=29; //看看输入的这一年是不是闰年,闰年就2月变成29天
}
for(i = M; i < month; i++) {//把不包括这一月的天数加上
day = day + d[i];
}
}
day=day % 7;
for(j=0;j<day;j++){ //j用来计一行的数,
printf(" "); //3个空格
}
do{
printf("%3d",k); //k代表一个月的日,从1开始
k++;
j++;
if(j==7){ //到星期六了就转行
j=0; //j重置为0
printf("\n");
}
}while(k<=d[i]); //i代表当前月,d[i]就是当前月有多少天
if(j!=0){ //最后一天要不是星期六就换行
printf("\n");
}
printf("---------------------");
return 0;
}