其他分享
首页 > 其他分享> > 非零段划分

非零段划分

作者:互联网

非零段划分
 非零段划分函数为代码中的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