编程题:相关月

来源:百度知道 编辑:UC知道 时间:2024/05/16 08:20:26
“相关月”是指哪些在一年中月份的第一天星期数相同的月份。例如,九月和十二月是相关的,因为九月一日和十二月一日的星期数总是相同的。两个月份相关,当且仅当两个月份第一天相差的天数能被7整除,也就是说,这两天相差为几个整星期。又如,二月和三月一般都是相关月,因为二月有28天,能被7整除,也恰好为4个星期。而在闰年,一月和二月的相关月与它们在平年的相关月是不同的,因为二月有29天,其后每个月份的第一天星期数都推后了一天。

关于输入
输入的第一行为整数n(n≤200),
其后n行,每行三个整数,依次为一个年份和两个月份,整数之间用一个空格分隔。

关于输出
输出有n行,对应于每个输入的年份和相应两个月份,
如果这两个月份是相关的,则输出YES;
否则,输出NO。

例子输入
5
1994 10 9
1935 12 1
1957 1 9
1917 9 12
1948 1 4

例子输出
NO
NO
NO
YES
YES

提示
可基于以前做过的判断给定日期是本年的第几天的程序进行改造。
此题目编程中可以不用数组,可在循环中每读入一组数据,输出一次相应的结果。

#include<stdio.h>
#define N 5
struct date
{
int year;
int month1;
int month2;
}dat[N];
void main()
{
int flag,i;
printf("输入相关信息\n");
for(i=0;i<N;i++)
scanf("%d%d%d",&dat[i].yeaar,&dat[i].month1,&dat[i].month2);
for(i=0;i<N;i++)
{flag=Xiangg(dat[i]);
if(flag==1)printf("YES\n");
else printf("NO\n"):
}
}
int Xiangg(struct date *p)
{
int flag=0,i,t,sum=0;
if(p->year%400==0||(p->year%4==0&&p->year%100!=0))flag=1;
for(i=min(p->month1,p->month2);i<max(p->month1,p->month2);i++)
{
if(i==2)
t=(flag==1)?29:28;
else
{
swith(i)
{
case 1: case 3: case 5: case 7: case 8: case 10;t=31;break;
case 4: case 6: case 9: case 11:t=30;break;
}
sum+=t;
}
return (sum%7==0)?1:0;
}