问题描述
查找一个只包含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> void max1(int a[],int n){//找到输入数组中的最长的1序列,并直接输出 int i,b[100],c[100]={0}; int t=0,ret=0; //用c[]来记录每个1序列的长度 //t记录1序列的个数 //b[]记录每个1序列的起始位置 for(i=0;i<n;i++){ if(a[i]==1){ if(ret==0){ b[t]=i; } c[t]++; ret=1; } //每次遇到0,则代表一个1序列的结束 //ret==1保证只有遇0只加一次 if(a[i]==0&&ret==1){ t++;ret=0; } } if(a[n-1]==1){ t++; } //求最长的1序列 int max=0,max_; for(i=0;i<t;i++){ if(c[i]>max){ max=c[i]; max_=i; } } if(max!=0){ printf("%d %d\n",b[max_],b[max_]+max-1); }else{ printf("-1 -1\n"); } } int main() { int m,n,i,j; int x[100][100],y[100]; scanf("%d %d",&m,&n); for(i=0;i<m;i++){ for(j=0;j<n;j++){ scanf("%d",&x[i][j]); } } //将数列的每一行赋值给一维数组,传入函数max1中 for(i=0;i<m;i++){ for(j=0;j<n;j++){ y[j]=x[i][j]; } max1(y,n); } return 0; }
0-1矩阵C语言
于 2024-02-01 12:31:26 首次发布