洛谷题目传送门 | CF原题传送门
这个题是让求输入的连续几个月份是否合法。
直接模拟就行了吧。
需要注意闰年的情况。
大体思路
先打表确定每个月的天数,因为有 24 个月,所以需要注意包含平年和闰年的全部情况。
因为输入是带有空格的,所以预先打表的月份天数之间也要带有空格,我们可以按照 平年、平年、闰年、平年、平年 的顺序预打表。
大概是这个样子:
1 2
| string sample="31 28 31 30 31 30 31 31 30 31 30 31 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 ";
|
读入每个月份时,需要用字符串,注意有空格,所以要用 getline
,但如使用 scanf
读入的 n,需要用 getchar();
吞上一行的回车。
输入字符串时,无需进行任何操作。读完后,直接使用 sample.find(s)
查找。
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<cstdio> #include<string> #include<cstring> #include<iostream> using namespace std;
string sample="31 28 31 30 31 30 31 31 30 31 30 31 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 n; string s; int main() { scanf("%d",&n); getchar(); getline(cin,s); if(sample.find(s)!=string::npos) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } return 0; }
|