解题思路:求出某年某月某日是星期几再按要求输出
注意事项:求某年某月某天是星期几:
公式:W= (d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
d:代表指定日期中的日是几号(如:2021年11月1日,d则为1)
m:代表指定日期中的月是几月(如:2021年11月1日,m则为11)
y:代表指定日期中的年是哪年(如:2021年11月1日,y则为2021)
注意:在公式中有个与其他公式不同的地方:
把1月和2月看成是上一年的13月和14月,例:如果是2021-1-10则换算成:2020-13-10来代入公式计算。以公元元年为参考,公元元年1月1日为星期一
参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
int fun(int a,int b,int q);
int main()
{
int i,j,m,n,t,d,s=0;
scanf("%d%d",&m,&n);
t=abs(fun(m,n,1));
if(m%4==0&&m%100!=0||m%400==0)
s=1;
switch(n)
{
case 1:
d=31;
break;
case 2:
if(s==0) d=28;
else d=29;
break;
case 3:
d=31;
break;
case 4:
d=30;
break;
case 5:
d=31;
break;
case 6:
d=30;
break;
case 7:
d=31;
break;
case 8:
d=31;
break;
case 9:
d=30;
break;
case 10:
d=31;
break;
case 11:
d=30;
break;
case 12:
d=31;
break;
}
printf("Sun Mon Tue Wed Thu Fri Sat\n");
for(i=1; i<=d; i++)
{
if(abs(fun(m,n,i))==0)
{
if(i==1)
{
printf(" ");
for(j=0;j<4*t;j++) printf(" ");
printf("%d",i);
}
else if(i<=9&&i>1) printf(" %d",i);
else printf(" %d",i);
}
else if(abs(fun(m,n,i))>=1&&abs(fun(m,n,i))<=5)
{
if(i==1)
{
printf(" ");
for(j=0;j<4*t;j++) printf(" ");
printf("%d",i);
}
else if(i<=9&&i>1) printf(" %d",i);
else printf(" %d",i);
}
else if(abs(fun(m,n,i))==6)
{
if(i==1)
{
printf(" ");
for(j=0;j<4*t;j++) printf(" ");
printf("%d\n",i);
}
else if(i<=9&&i>1) printf(" %d\n",i);
else if(i>=10&&i!=d)printf(" %d\n",i);
else if(i==d) printf(" %d",i);
}
}
return 0;
}
int fun(int a,int b,int q)//计算某年某月是星期几
{
int w;
if(b==1||b==2)
{
a--;b+=12;
}
w=(q+1+2*b+3*(b+1)/5+a+a/4-a/100+a/400)%7;
return w;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复