C语言,男女排队程序纠错

运动会快到了,小码哥班里组织彩排,小码哥作为体委不得不担当同学排队列的大任。为了让男女分配均匀,小码哥想知道队列中男女生人数一样的子序列(连续的)最多多长。
样例
输入:
9
0 1 0 0 0 1 1 0 0
输出:
6
我的程序(输入样例得出的是2,求指点):

#include
int main() 
{ 
int a[100001]={0},b[100001]={0},num1=0,num2=0,n=0,i=0,j=0,k=0,t=0,l=0;
scanf("%d ",&n);
for(;iscanf("%d ",&k);
    a[i]=k;
}
//输入数据
for(i=0;ifor(j=i;jif(a[j]==0)
        t=t+1,num1++;
        if(a[j]==1)
        t=t-1,num2++;
        if(t==0)
        l=num1+num2;
    }
b[i]=l;
}
//挨个找出符合条件的子列
l=b[0];
for(i=0;iif(b[i]>l)
   l=b[i];
}
//比较得出最长子列
printf("%d",l);
//输出
    return 0; 
}

    
    

#include<stdio.h>
int main() 
{ 
int a[100001]={0},b[100001]={0},num1=0,num2=0,n=0,i=0,j=0,k=0,t=0,l=0;
scanf("%d ",&n);
for(;i<n;i++)
{
    scanf("%d ",&k);
    a[i]=k;
}
for(i=0;i<n;i++)
{
    num1=0;
    num2=0;
    t=0;
    l=0;
    for(j=i;j<n;j++)
    {
        if(a[j]==0)
        t=t+1,num1++;
        if(a[j]==1)
        t=t-1,num2++;
        if(t==0)
        l=num1+num2;
    }
b[i]=l;
}
l=b[0];
for(i=0;i<n;i++)
{
    if(b[i]>l)
   l=b[i];
}
if(l!=0)
    printf("%d",l);
else
    printf("0");
    return 0; 
}

你的程序输出的结果不正确,因为在每次搜索完成后,你需要将数组清零,以便搜索下一个子序列。

#include<stdio.h>
int main()
{
int a[100001]={0},num1=0,num2=0,n=0,i=0,j=0,k=0,t=0,l=0;
scanf("%d ",&n);
for(;i<n;i++)
{
scanf("%d ",&k);
a[i]=k;
}
for(i=0;i<n;i++)
{
t=0;
num1=0;
num2=0;
for(j=i;j<n;j++)
{
if(a[j]==0)
t=t+1,num1++;
if(a[j]==1)
t=t-1,num2++;
if(t==0)
{
l=num1+num2;
break;
}
}
if(num1+num2>l)
{
l=num1+num2;
}
}
printf("%d",l);
return 0;
}