1. 程式人生 > 其它 >xdoj 01矩陣(c語言 01二維矩陣)

xdoj 01矩陣(c語言 01二維矩陣)

技術標籤:c語言陣列

**

問題描述

查詢一個只包含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; }

第一次發,歡迎交流探討。
謝謝。