【问题描述】
给定 n (1 ≤ n ≤ 24)个正整数a1、a2、...、an,请判断这 n 个数是否是连续 n 个月份的天数,这些月份可以跨年度。
【输入形式】
输入第一行为一个整数 n,第二行为n个正整数 a1、a2、...、an(28 ≤ ai ≤ 31)。
【输出形式】
输出Yes或No。
【样例输入1】
4 31 31 30 31
【样例输出1】
Yes
【样例输入2】
2 30 30
【样例输出2】
No
【样例输入3】
5 29 31 30 31 30
【样例输出3】
Yes
【样例说明】
在第一个样例中,连续4个数是7、8、9、10月份的天数
在第二个样例中,没有哪两个连续月份的天数都为30
在第三个样例中,是某闰年的2、3、4、5、6月份的天数
#include<iostream>
using namespace std;
int main()
{
int n,MAX=0;
cin>>n;
int year[48]={31,28, 31,30,31,30,31,31,30,31,30,31,31,29, 31,30,31,30,31,31,30,31,30,31,31,28, 31,30,31,30,31,31,30,31,30,31,31,28, 31,30,31,30,31,31,30,31,30,31};
//最多连续两年,则有平闰、平平、闰平三种情况
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}//将测试数据存入数组
for(int k=0;k<24;k++)
{
int num=0;//每次测试从0开始记录
int f=k;
for(int i=0;i<n;i++)
{
if(a[i]==year[f])
{
num++;
f++;//使两个数组同时递增
}
else break;
}
if(num>=MAX)
MAX=num;//记录相等次数
}
if(MAX==n)//n个月则要求n次相等
{
cout<<"Yes";
}
else cout<<"No";
return 0;
}
此题的关键是如何跨过两个年份以及逐一比较两个数组。