【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;
}