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相关
在下列比赛中: