【codevs1006】等差数列

题目大意:给定一个 N(N <= 100) 个数字组成的集合,从中取出若干数字组成的等差数列最长是多少。

题解:由于这道题数据范围较小,可以直接依据每个数字进行枚举。首先,这道题给出的是一个集合,因此先将集合中的元素排序之后更能得到最优解。之后枚举以每个数字为数列起点,再枚举它后面的数字作为等差数列的第二项,再向后枚举找到公差相同的项,统计答案即可。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=110;

int n,ans=1,a[maxn];

void read_and_parse(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	sort(a+1,a+n+1);
}

void solve(){
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			int d=a[j]-a[i],sum=2,idx=j;
			for(int k=j+1;k<=n;k++)if(a[k]-a[idx]==d)idx=k,++sum;
			ans=max(ans,sum);
		}
	}
	printf("%d\n",ans);
}

int main(){
	read_and_parse();
	solve();
	return 0;
}
posted @ 2018-11-28 15:55  shellpicker  阅读(182)  评论(0编辑  收藏  举报