思路:在整个二维数组上下各加上一行0,然后从左到右,一列一列进行判断(判断的是数字改变次数)
这里一列一列的找是因为可以把1,6,8分解成一片一片的元素,而且1<8<6,不知道能看懂不。。。
代码里去掉//,输入例子,可以得到
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0
00131008
即出现了1的元素flag1,8的元素flag8,输出为8
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 0 0 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0
00132006
即出现了1,6,8的元素,即为6.
#include <stdio.h>
int main()
{
int n,m,i,j,count1=0,flag=-1,flag1=0,flag6=0,flag8=0;
scanf("%d",&n);
scanf("%d",&m);
int a[n+2][m]={0};
for( i = 1; i < n+1; i++)
{
for( j = 0; j < m; j++)
{
scanf("%d",&a[i][j]);
}
}
for ( j = 0; j < m; j++)
{
for ( i = 0; i < n+2; i++)
{
if (a[i][j]==1)
{
flag=1;
}
if (flag==1&&a[i][j]==0)
{
count1++;
flag=0;
}
if (flag==0&&a[i][j]==1)
{
count1++;
flag=1;
}
}
//printf("%d",count1);
if (count1==1)
{
flag1=1;
}
if (count1==3)
{
flag8=1;
}
if (count1==2)
{
flag6=1;
}
count1=0;
flag=-1;
}
if(flag1==1&&flag6==0&&flag8==0) printf("%d",1);
if(flag1==1&&flag6==0&&flag8==1) printf("%d",8);
if(flag1==1&&flag6==1&&flag8==1) printf("%d",6);
return 0 ;
}