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

猜你喜欢

转载自www.cnblogs.com/wzj-xhjbk/p/10032600.html