解题思路:求出某年某月某日是星期几再按要求输出
注意事项:求某年某月某天是星期几:
公式: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语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:798 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:468 |
求圆的面积 (C语言代码)浏览:1756 |
大家好,我是验题君浏览:604 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:644 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1496 |
C二级辅导-进制转换 (C语言代码)浏览:750 |
C语言程序设计教程(第三版)课后习题10.7 (用指针求解)浏览:1542 |
矩阵的对角线之和 (C语言代码)浏览:1401 |
筛排处理 (C语言代码)浏览:830 |