题目描述 Description
给定n(1<=n<=100)个数,从中找出尽可能多的数使得他们能够组成一个等差数列.求最长的等差数列的长度.
输入描述 Input Description
第一行是一个整数n,接下来一行包括了n个数,每个数的绝对值不超过10000000.
输出描述 Output Description
对于每个输入数据,输出你所找出的最长等差数列的长度
样例输入 Sample Input
7
3
8
4
5
6
2
2
样例输出 Sample Output
5
代码
#include<stdio.h>
int s0[100];
void f(int n)//排序函数
{
int i,j,key;
for(j=1;j<n;j++){
key=s0[j];
i=j-1;
while(i>-1&&(s0[i]>key)){
s0[i+1]=s0[i];
i--;
}
s0[i+1]=key;
}
}
int main()
{
int n;
scanf("%d",&n);
int i,d,max=1,nm=2;
//存入数据
for(i=0;i<n;i++){
int t;
scanf("%d",&t);
s0[i]=t;
}
f(n);//排序
int next;
int j,k;
//寻找最大数列
for(i=0;i<n;i++){
//确定a1
for(j=i+1;j<n;j++){
//确定a2,和d值
d=s0[j]-s0[i];
next=s0[j]+d;//next为该数列下次的值
for(k=j+1;k<n;k++){
//寻找next,并统计数列长度
if(s0[k]==next){
next+=d;//刷新next值
nm++;//数列长度增加
}
if(max<nm)//刷新max值
max=nm;
nm=2;//刷新nm值
}
}
printf("%d\n",max);
return 0;
}










网友评论