算法与数据结构实验题 4.8 干净的序列

★实验任务
有一个长度为 n 的序列,第 i 个的数为 a[i]。我们定义如果它的一个连续的子串为“没有进行过干净的交易”,那么这个子串的最大值与最小值之差在[m,k]中。
现在,你的任务是找到一条最长的“没有进行过干净的交易”的子串。
★数据输入
第一行输入三个正整数 n m k (0<n<=10000),m(0 =< m =< k =< n)。
接下去一行有 n 个正整数,第 i 个数表示 a[i]的值。
★数据输出
输出一个数,表示这个子串的长度。

//输入示例1
5 0 0
1 1 1 1 1
//输出示例1
5
//输入示例2
6 0 3
3 1 2 3 4 5
//输出示例2
5

通过二重循环判断,其中注意:当max-min<m时继续内重循环,因为之后可能会有更小或者更大的数始得max-min>=m。

#include<stdio.h>
int main()
{
	int n,m,k,i,j,a[10005],max,min,count,ans=0;
	scanf("%d%d%d",&n,&m,&k);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n-1;i++)
	{
		max=a[i];min=a[i];
		for(j=i+1;j<n;j++)
		{
			if(a[j]>max)max=a[j];
			if(a[j]<min)min=a[j];
			if(max-min>=m&&max-min<=k)count=j-i+1;
			else if(max-min<m)continue;
			else break;
		}
		if(count>ans)ans=count;
                count=0;
	}
	printf("%d",ans);
	return 0;
 } 
posted @ 2020-10-05 16:20  尼古拉斯宝莉  阅读(227)  评论(0编辑  收藏  举报