C程序 - 找到数组中最大的序列

时间:2018-02-25 23:29:31

标签: c arrays

给出这个例子:

int arr[3][7] = {       {1,0,0,1,1,1,1},  //should output 4
                        {0,1,1,1,1,0,1},  //should output 4
                        {0,0,1,1,1,1,1}}; //should output 5

找到包含数字 1 的最大序列,并打印行索引和 1 的数量。

不计算每行 1 的总数。只有他们是一个接一个

这是我的方法:

int main(){
    int i,j,c=0,count=0;

    int arr[3][7] = {   {1,0,0,1,1,1,1},  //output 4
                        {0,1,1,1,1,0,1},  //output 4
                        {0,0,1,1,1,1,1}}; // output 5

    for(i=0; i<3; i++){
        for(j=0; j<7; j++){
            if(arr[i][j] == 1){
                c++;
            } else if( arr[i][j] == 0 && c > count ) {
                count = c;
                c = 0;
            }
        }
        printf("%d\n", count);
    }

  return 0;
}

我想得到的输出现在是4,4,5,但我得到1,4,5。

解决方案感谢https://stackoverflow.com/users/1228887/twain249

int main(){
    int i,j,c=0,count=0;

    int arr[3][7] = {   {1,1,0,1,1,1,1},  //output 4
                        {0,1,1,1,1,0,1},  //output 4
                        {0,0,1,1,1,1,1}}; // output 5

    for(i=0; i<3; i++){
        for(j=0; j<7; j++){
            if(arr[i][j] == 1){
                c++;
            } else {
                count = c;
                c = 0;
            }
        }
        if(c > count){
            count = c;
        }
        printf("%d\n", count);
        c=0;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您忘记处理最长序列是列表末尾的情况

在内部j循环后添加以下内容

if (c > count) {
    count = c;
}

你也忘了在每次检查后添加一个清除。

打印后添加

c = clear = 0;

编辑:还有1个错误。即使新序列不是最长的,您也需要重置c

将else改为

else if (arr[i][j] == 0) { // If isn't necessary if 0/1 are your only options
{
    if (c > count) {
        count = c;
    }
    c = 0;
}