请教c语言高手,有道题我看不懂,给我解释一下!

来源:百度知道 编辑:UC知道 时间:2024/05/24 02:44:57
题目是:
1062 不吉利日期
Description
在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7)
Input
输入有一行,即一月一日星期几(w)。(1<=w<=7)
Output
输出有一到多行,每行一个月份,表示该月的13日是星期五。
Sample Input
7
Sample Output
1
10

答案是:
#include<stdio.h>
void main()
{
int w,t,m,i;
m=0;
t=0;
scanf("%d",&w);
if(w>=1&&w<=7)
m=6-w;
else if(w>=6&&w<=7)
m=13-w;
int a[15]={0,31,59,90,120,151,181,212,243,273,304,334};
for(i=0;i<=11;i++)
if((a[i]+13-m)%7==0)
{t=i+1;
printf("%d\n",t);}
}

我看不懂这是如何算出来的, 帮我解释解释,谢谢了。

因为数组a[15]里的数都是代表各月第一天是这一年的第几天,
所以a[i]+13就是第i+1月13号是该年的第几天,
m代表新年第一天与星期五有几天偏差。
a[i]+13-m求出第i+1个月的13号与某个周五有几天,
取模7,
==0的说明该月13号为周五,
否则不是~!

该算法不能用于闰年。