题目大概:
输入一个矩形的长和宽,然后输入矩形状的由1和0构成的数,若这些数不全为1,并且这些数中的0不挨着0,就输出yes,否则输出no。当输入0 0时结束输入。
思路:
用二维数组储存数据,用两个数控制题目中的两个要求,满足则输出yes,反之no。
感想:
做这个题,思维要严谨,把可能的包含在内,不可能的也不能包含进去。
代码:
#include
<iostream>
using namespace std ;
int main ()
{ int n ,m ;
int a [ 10 ][ 10 ];
while (cin >>n >>m )
{ if (n == 0 &&m == 0 ) break ;
for ( int i = 0 ;i <n ;i ++)
{ for ( int t = 0 ;t <m ;t ++)
{cin >>a [i ][t ];
}
}
int k = 0 ,l = 0 ;
for ( int i = 0 ;i <n ;i ++)
{ for ( int t = 0 ;t <m ;t ++)
{ if (a [i ][t ]== 0 ) {
if (i -1 > 0 ) if (a [i -1 ][t ]== 0 )k ++;
if (i +1 <n ) if (a [i +1 ][t ]== 0 )k ++;
if (t -1 > 0 ) if (a [i ][t -1 ]== 0 )k ++;
if (t +1 <m ) if (a [i ][t +1 ]== 0 )k ++;
}
if (a [i ][t ]!= 1 )l ++;
}
}
if (k )cout << "No" <<endl ;
if (!k ) if (l )cout << "Yes" <<endl ;
if (!l )cout << "No" <<endl ;
}
return 0 ;
}
using namespace std ;
int main ()
{ int n ,m ;
int a [ 10 ][ 10 ];
while (cin >>n >>m )
{ if (n == 0 &&m == 0 ) break ;
for ( int i = 0 ;i <n ;i ++)
{ for ( int t = 0 ;t <m ;t ++)
{cin >>a [i ][t ];
}
}
int k = 0 ,l = 0 ;
for ( int i = 0 ;i <n ;i ++)
{ for ( int t = 0 ;t <m ;t ++)
{ if (a [i ][t ]== 0 ) {
if (i -1 > 0 ) if (a [i -1 ][t ]== 0 )k ++;
if (i +1 <n ) if (a [i +1 ][t ]== 0 )k ++;
if (t -1 > 0 ) if (a [i ][t -1 ]== 0 )k ++;
if (t +1 <m ) if (a [i ][t +1 ]== 0 )k ++;
}
if (a [i ][t ]!= 1 )l ++;
}
}
if (k )cout << "No" <<endl ;
if (!k ) if (l )cout << "Yes" <<endl ;
if (!l )cout << "No" <<endl ;
}
return 0 ;
}