100 #P1683. *【模拟】等差数列

*【模拟】等差数列

Description

【题意】20220623scy修改数据
给定 $n$ 个数,从中找出尽可能多的数使得他们能够组成一个等差数列。求最长的等差数列的长度。

【输入描述】
第一行是一个整数 $n(1 \le n \le 100)$。
接下来一行包括了n个数,每个数的绝对值不超过 $10^6$ 。

【输出描述】
对于每个输入数据,输出你所找出的最长等差数列的长度。

【样例输入】
7
3 8 4 5 6 2 2

【样例输出】
5

【解释】
找出的数为:2,3,4,5,6,总共5个。

Hint

#include<bits/stdc++.h>
using namespace std;
int a[110];
int main()
{
    int n;scanf("%d",&n);
    for(int i=1;i<= n;i++)scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    int ans=1;
    for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)//以a[i]作为开头,第二个为a[j],枚举公差
    {
        int d=a[j]-a[i];
		int s=2;
		for(int k=j+1;k<=n;k++)if(a[k]-a[i]==d*s)s++;
        ans=max(ans,s);
    }
    printf("%d\n",ans);
    return 0;
}

Source

J4