单点时限: 2.0 sec
内存限制: 256 MB
给定n(1≤n≤100)个数,从中找出尽可能多的数使得他们能够组成一个最长的等差数列。输出该最长等差数列的长度。
注意:当n=1时,构成长度为1的等差数列。
输入格式
第 1 行:一个整数 T (1≤T≤10) 为测试数据组数。
每组测试数据按如下格式输入:
第 1 行:一个自然数n(1≤n≤100),表示数据的个数。
第2行到n+1:每行输入一个自然数。
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中输出按要求找到的最长等差数列的长度。
样例
input
3
5
9
7
1
2
3
10
8
6
2
4
9
0
10
12
11
7
5
10
10
10
10
10
output
case #0:
3
case #1:
7
case #2:
5
/*
思路:暴力
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int a[100];
int n;
int M=1;
void f() {
for(int i = 0; i < n-1; i++) {
if(n-i<M)
break;
for(int j = i+1; j < n; j++) {
int d=a[j]-a[i];
int k=a[j];
int sum=2;
for(int z=j+1; z<n; z++) {
if(a[z]-k==d) {
sum++;
k=a[z];
}
}
M=max(M,sum);
}
}
}
int main() {
int t;
cin>>t;
for(int i = 0; i < t; i++) {
cin>>n;
for(int j = 0; j < n; j++)
cin>>a[j];
sort(a,a+n);
M=1;
f();
printf("case #%d:\n",i);
cout<<M<<endl;
}
}