zoukankan      html  css  js  c++  java
  • CODE[VS] 1006 等差数列

    题目描述 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

    数据范围及提示 Data Size & Hint


    刚看这个题觉得可以用dp来做,但是考虑到当前状态存储的话,需要两个量,即长度和等差数列的差,所以不好做就不尝试这种方案了,所以就往简单处想,直接循环判断i和比i大的j这个状态时的等差数列长度,然后进行与max的比较即可.
    当然,前提是有序的,所以我们首先选择进行快排

    /*************************************************************************
        > File Name: 等差数列.c
        > Author: zhanghaoran
        > Mail: chilumanxi@gmail.com
        > Created Time: 2015年06月09日 星期二 18时19分07秒
     ************************************************************************/
    
    #include <stdio.h>
    #include <string.h>
    
    int n;
    int dp[101];
    
    void swap(int *a, int *b){
    	int *t = a;
    	a = b;
    	b = t;
    }
    
    void quicksort(int a[], int left, int right){
    	int i, j, s, t;
    	if(left < right){
    		s = a[right];
    		i = left - 1;
    		for(j = left; j < right; j ++){
    			if(a[j] <= s){
    				t = a[++i];
    				a[i] = a[j];
    				a[j] = t;
    			}
    		}
    		t = a[right];
    		a[right] = a[i + 1];
    		a[i + 1] = t;
    		quicksort(a, left, i);
    		quicksort(a, i + 2, right);
    	}
    }
    int solve(int a[]){
    	int i, j;
    	int max = 0, res = 0;
    	int temp;
    	int t, s;
    	for(i = 0; i < n - 1; i ++){
    		for(j = i + 1; j < n; j ++){
    			temp = a[j] - a[i];
    			t = j;
    			s = i;
    			while(t < n){
    				if(a[t] - a[s] == temp){
    					s = t;
    					t ++;
    					res ++;
    				}
    				else t ++;
    			}
    			max = max > res ? max : res;
    			res = 0;
    		}
    	}
    	return max;
    }
    
    
    int main(void){
    	int i, j;
    	int a[101];
    	scanf("%d", &n);
    	for(i = 0; i < n; i ++){
    		scanf("%d", &a[i]);
    	}
    	quicksort(a, 0, n - 1);
    	printf("%d
    ", solve(a) + 1);
    	return 0;
    }


  • 相关阅读:
    程序员的成长阶梯和级别[转]
    【转】教你如何迅速秒杀99%的海量数据处理面试题
    【转】探索C#之布隆过滤器(Bloom filter)
    基于.NET平台常用的框架整理 [转]
    使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]
    使用异步编程
    Node.js Web框架收集
    js闭包的定义与应用
    null 与 undefined 区别
    git 基本操作—笔记
  • 原文地址:https://www.cnblogs.com/chilumanxi/p/5136132.html
Copyright © 2011-2022 走看看