感觉条件欠缺很多,不如暴力枚举吧~
就是枚举这个等差数列的起点以及公差,构造一个等差数列
然后看这个等差数列的每个数在原数列中是否存在,
若找到该等差数列的前至少4项,则表明找到~~
附上小弟代码~
假定了数列大小最大为100。。。
#include "stdio.h"
#include "string.h"
#include
using namespace std;
int a[100],n;
bool bs(int x)
{
int low,high,mid;
low=0;high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x)
return true;
if(a[mid]>x)
high=mid-1;
else
low=mid+1;
}
return false;
}
int main()
{
int i,j,k,k2;
while(scanf("%d",&n)>0)
{
for(i=0;i
scanf("%d",a+i);
}
sort(a,a+n);
for(i=0;i
for(j=1;a[i]+j*3<=a[n-1];j++)
{
for(k=0;;k++)
{
if(!bs(a[i]+k*j))
break;
}
if(k>3)
{
for(k2=0;k2
printf("%d ",a[i]+k2*j);
}
printf("\n");
}
}
}
}
return 0;
}