1006等差数列

2017-03-20  本文已影响0人  star_night

题目描述 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;
}
上一篇 下一篇

猜你喜欢

热点阅读