写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。
题目:
题目链接:https://www.dotcpp.com/oj/problem1493.html
题目 1493: [蓝桥杯][算法提高VIP]任意年月日历输出
时间限制: 1Sec 内存限制: 128MB 提交: 919 解决: 285
题目描述
已知2007年1月1日为星期一。
设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。
注意:短线“-”个数要与题目中一致,否则系统会判为错误。
输入
年月和月份
输出
无
样例输入
2010 9
样例输出
C语言解法
#include <stdio.h>
int fun(int y, int m);
int judge(int y, int m);
int main()
{
int year, month, i;
scanf("%d %d", &year, &month);
printf("---------------------\n\
Su Mo Tu We Th Fr Sa\n\
---------------------\n");
// 判断当前从周几开始打印
int start = fun(year, month);
// printf("%d\n", start);
int days = judge(year, month);
for (i = 1; i <= days + start; i++)
{
if (i <= start)
printf(" ");
else
printf("%3d", i - start);
if (i % 7 == 0)
printf("\n");
}
printf("\n---------------------\n");
}
int fun(int y, int m)
{
int sum = 0, i;
//先加本年到这个月为止之前的天数
for (i = 1; i < m; i++)
sum += judge(y, i);
for (i = 2007; i < y; i++)
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
sum += 366;
else
sum += 365;
return (sum + 1) % 7; //注意2007 1 1是星期一
}
//根据传入的年份和月份判断当前月有多少天
int judge(int y, int m)
{
if (m == 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0))
return 29;
else if (m == 2)
return 28;
else
switch (m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
break;
case 4:
case 6:
case 9:
case 11:
return 30;
break;
}
}
都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏
如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。