如何判断数组任意几个数成等差

如何判断数组任意几个数成等差,比如12579111214中的57911,或者13467810121315中的1471013,虽然678也成等差,但要求数目不少于4个,可以... 如何判断数组任意几个数成等差,比如1 2 5 7 9 11 12 14中的5 7 9 11,或者1 3 4 6 7 8 10 12 13 15中的1 4 7 10 13,虽然6 7 8也成等差,但要求数目不少于4个,可以相邻或相间,间隔不限,可以有个思路,或者算法都可以,能有一个程序代码就更好了,谢谢各位了 展开
martinblack954
2011-08-07 · TA获得超过1490个赞
知道小有建树答主
回答量:591
采纳率:0%
帮助的人:246万
展开全部
感觉条件欠缺很多,不如暴力枚举吧~
就是枚举这个等差数列的起点以及公差,构造一个等差数列
然后看这个等差数列的每个数在原数列中是否存在,
若找到该等差数列的前至少4项,则表明找到~~
附上小弟代码~
假定了数列大小最大为100。。。
#include "stdio.h"
#include "string.h"
#include <algorithm>
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<n;i++)
{
scanf("%d",a+i);
}
sort(a,a+n);
for(i=0;i<n;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<k;k2++)
{
printf("%d ",a[i]+k2*j);
}
printf("\n");
}
}
}
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式