非零段划分
作者:互联网
非零段划分
非零段划分函数为代码中的find
#include<stdio.h>
#include<windows.h>
int find(int b[],int n)
{
int i,start,end,sum=0;
start=1,end=n;
while(b[start]==0&&end!=start) /*去掉数组的首部0*/
start++;
while(b[end]==0&&end!=start) /*去掉数组的尾部0*/
end--;
if(end==start&&b[end]!=0) /*排除只有一个非零段情况*/
return 1;
if(end==start&&b[end]==0) /*排除全0情况*/
return 0;
for(i=start;i<=end-1;i++)
{
if(b[i+1]==0&&b[i]!=0)
sum++;
}
return ++sum; /*sum为为为零段,加上1才为非零段*/
}
int main(){
int n,a[1000],b[1000],MAX[1000],i,max,j,MM,k;
max=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>=max)
max=a[i];
}
if(max==0)
MM=0;
else
{
for(i=1;i<=max;i++)
{
for(k=1;k<=n;k++)
{
b[k]=a[k]; /*每次循环重置a数组*/
}
for(j=1;j<=n;j++)
{
if(b[j]<i)
b[j]=0;
}
MAX[i]=find(b,n); /*存放每次p值对应的非零段数目*/
}
MM=MAX[1];
for(i=2;i<=max;i++)
{
if(MAX[i]>MM)
MM=MAX[i];
}
}
printf("%d",MM);
system("pause");
return 0;
}
标签:end,int,划分,start,非零段,&&,return 来源: https://blog.csdn.net/MD_DX/article/details/121130953