总时间限制: 1000ms 内存限制: 65536kB描述
“相关月”是指那些在一年中月份的第一天星期数相同的月份。例如,九月和十二月是相关的,因为九月一日和十二月一日的星期数总是相同的。两个月份相关,当且仅当两个月份第一天相差的天数能被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
来源北京大学医学部计算概论08期末考试题
1 #include<iostream>
2 using namespace std;
3 int month[21]={0,31,28,31,30,31,30,31,31,30,31,30,31};//非闰年
4 int rmonth[21]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年
5 int flag=1;
6 int main()
7 {
8 int n;
9 int year;
10 int month1;
11 int month2;
12 cin>>n;
13 for(int i=1;i<=n;i++)
14 {
15 cin>>year>>month1>>month2;
16 if(month1>month2)
17 {
18 int d=month1;month1=month2;month2=d;
19 }
20 if((year%4==0&&year%100!=0)||year%400==0)
21 {
22 int begin=1;//默认第一天是星期一
23 for(int j=month1;j<=month2-1;j++)
24 {
25 for(int k=1;k<=rmonth[j];k++)
26 {
27 if(begin==7)
28 begin=1;
29 else
30 begin++;
31
32 }
33
34 }
35 if(begin==1)
36 cout<<"YES"<<endl;
37 else
38 cout<<"NO"<<endl;
39 }//闰年
40 else
41 {
42 int begin=1;//默认第一天是星期一
43 for(int j=month1;j<=month2-1;j++)
44 {
45 for(int k=1;k<=month[j];k++)
46 {
47 if(begin==7)
48 begin=1;
49 else begin++;
50 }
51 }
52 if(begin==1)
53 cout<<"YES"<<endl;
54 else
55 cout<<"NO"<<endl;
56 }//非闰年
57 }
58 return 0;
59 }