题目简述:判断草地是否漂亮,若全是1则不漂亮输出No,若相邻两个都是0则不漂亮,其余情况漂亮输出Yes。
解题思路;
1、因为草地是方格类型的,所以考虑到用二维数组。
2、输入数据后,首先判断是否全是1,若是则输出“No”,否则程序继续运行。
3、若继续运行,首先判断第一行,从a[0][1]开始,判断a[0][j]与a[0][j-1]是否都是0,若成立则输出"No",否则就继续判断。
4、判断完第一行,则之后的每一行,都可以按照相同的方法进行判断。即j!=0时,判断其之前的和其上面一个的值,若都为0,输出“No”,否则继续判断。
5、到最后若判断出是漂亮的,输出“Yes”。
源代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int i,j,b,c;
while (cin>>b>>c)
{
if (b==0&&c==0)
break;
int a[10][10];
int k=0;
for (i=0;i<b;i++)
for (j=0;j<c;j++)
cin>>a[i][j];
for (i=0;i<b;i++)
{
for (j=0;j<c;j++)
{
if (a[i][j]==1)
continue;
if (a[i][j]==0)
{
k=1;
break;
}
}
if (k==1)
break;
}
if (k==0)
{
cout<<"No"<<endl;
continue;
}
k=0;
for (j=1;j<c;j++)
if (a[0][j]==0&&a[0][j-1]==0)
k=1;
if (k==1)
{
cout<<"No"<<endl;
continue;
}
for (i=1;i<b;i++)
{
for (j=0;j<c;j++)
{
if (a[i][j]==0&&a[i-1][j]==0)
k=1;
if (j!=0)
{
if (a[i][j]==0&&a[i][j-1]==0)
k=1;
}
if (k==1)
break;
}
if (k==1)
break;
}
if (k==1)
cout<<"No"<<endl;
if (k==0)
cout<<"Yes"<<endl;
}
return 0;
}
解题感想:开始看这道题感觉很简单就动手写,起初的思路太复杂,就是把每一种情况都列出来进行判断,有四个角怎么判断,外围怎么判断,内部怎么判断,程序写了很长还不对。后来又考虑了一下,为了避免数组越界,可以考虑一种新的比较方法。即代码所示。省了很多事也避免了很多麻烦。找规律进行判断。所以遇到一个问题呢还是要先多考虑一下,寻找最优解。可能就有很多简单的方法。也同时又熟悉了一种新的比较方式,对于二维数组而言。