//0-1矩阵这题目依我看主要是流程控制
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
//5 6
//1 0 0 1 1 0
//0 0 0 0 0 0
//1 1 1 1 1 1
//1 1 1 0 1 1
//0 0 1 1 0 0 //题目用例
int main(){
int m,n,i,j,a[10][10],k[10]={0},sign=0,count=0;//a[i][j]为原二维数组
double t[10];//
scanf("%d%d",&m,&n);//m,n限制行列
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}//输入a[][]
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]==1)count++;
}
k[i]=count;
t[i]=k[i]/2.0; //t[i]为了判断是1最长列,如果sign>t[i]则是最长列,全是0或1情况除外
count=0;//注意将count归零
} //要不然k[i]统计的是count累计个数,而不是每一行的1个数
for(i=0;i<m;i++){
if(k[i]==0) printf("-1 -1\n");//全是0就输出-1 -1
else if(k[i]==n)printf("0 %d\n",n-1);
else{
//全是1,sign>t[i]判断失效(6个1时,t[i]=3,sign=4就满足,会输出0 3这种情况)
for(j=0;j<n;j++){
if(a[i][j]==1){
sign=sign+1;
if(sign>t[i]&&k[i]>0&&k[i]<n)//加上条件0<k[i]<n(排除前面两种特殊)
{
//输出j+1-sign就确定前一个的开始坐标,此时满足的j是最长列的末坐标
printf("%d %d\n",j+1-sign,j);
sign=0; //注意将sign归0,要不然到下一行,sign会累加
break;//满足条件(找到最长列就跳出)
}
}
else if(a[i][j]==0) sign=0;
}
}
}//最后注意中括号的嵌套
return 0;
}
终于解决xdoj_0-1矩阵问题,嗨皮
最新推荐文章于 2024-08-29 07:41:07 发布