xdoj 01矩陣(c語言 01二維矩陣)
阿新 • • 發佈:2020-12-25
**
問題描述
查詢一個只包含0和1的矩陣中每行最長的連續1序列。
輸入說明
輸入第一行為兩個整數m和n(0<=m,n<=100)表示二維陣列行數和列數,其後為m行資料,每行n個整數(0或1),輸入資料中不會出現同一行有兩個最長1序列的情況。
輸出說明
找出每一行最長的連續1序列,輸出其起始位置(從0開始計算)和結束位置(從0開始計算),如果這一行沒有1則輸出兩個-1,然後換行。
輸入樣例
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
輸出樣例
3 4
-1 -1
0 5
0 2
2 3
#include<stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n); //m行 n列
int a[m][n],i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]); //輸入矩陣
int b[m][2]; //代表輸出結果
for(i=0;i<m;i++)
{
int c=0,d=0,e=0; //c代表1個數
for(j=0;j<n;j++)
{
if(a[i][j]==1)
{
c++;
if(c>d)
{
b[i][0]=j+1-c; b[i][1]=j;
}
e=c; //用e記錄1的個數
}
else if(a[i][j]!=1)
{
c=0;
}
if(e>d) //連續1的次數比上次多。d就等於e
d=e;
}
if(d==0) //一行都不是1
{
b[i][0]=-1; b[i][1]=-1;
}
}
for(i=0;i<m;i++)
{
for(int j1=0;j1<2;j1++)
printf ("%d ",b[i][j1]);
printf("\n"); //每兩個換行
}
return 0;
}
第一次發,歡迎交流探討。
謝謝。