![](https://img-blog.csdnimg.cn/cb47e23cbd2d4d339afbb4f9f017115c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbHNnb29zZQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
原题里边其实是一个300*300的序列,读进来之后对每一个点作为起点判断一遍四种情况就好了,
代码如下所示:
#include<iostream>
#include<string>
using namespace std;
char a[300][300];
int ant=0;
void find1(int i,int j)
{
if(a[i][j]!='2')
return;
//向右
if(j+3<300)
{
if((a[i][j+1]=='0')&&(a[i][j+2]=='2')&&(a[i][j+3]=='0'))
ant++;
}
if(i+3<300)
{
if((a[i+1][j]=='0')&&(a[i+2][j]=='2')&&(a[i+3][j]=='0'))
ant++;
}
if((j+3<300)&&(i+3<300))
{
if((a[i+1][j+1]=='0')&&(a[i+2][j+2]=='2')&&(a[i+3][j+3]=='0'))
ant++;
}
return;
}
int main()
{
for(int i=0;i<300;i++)
for(int j=0;j<300;j++)
cin>>a[i][j];
for(int i=0;i<300;i++)
for(int j=0;j<300;j++)
find1(i,j);
cout<<ant<<endl;
return 0;
}