分析:给你n个数字,判断最长的连续等差数列的数或等比数列的数的个数有多少个。等差:a[n]+a[n-2]=2*a[n-1],等比:a[n]*a[n-2]=a[n-1]*a[n-1],要注意的是判断时要分开判断,否则会WA,比如1 2 4 6,要是一起判断的话就错了。
# include <stdio.h>
__int64 a[1000010];
int main()
{
int i,j,n,t,max,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%I64d",&a[i]);
if(n<=2)
{printf("%d\n",n);continue;}
ans=2;max=0;
for(j=3;j<=n;j++)
{
if(a[j]+a[j-2]==2*a[j-1])
ans++;
else
{
if(ans>max)
max=ans;
ans=2;
}
}
if(ans>max)
max=ans;
ans=2;
for(j=3;j<=n;j++)
{
if(a[j]*a[j-2]==a[j-1]*a[j-1])
ans++;
else
{
if(ans>max)
max=ans;
ans=2;
}
}
if(ans>max)
max=ans;
printf("%d\n",max);
}
return 0;
}

本文提供了一个算法,用于在给定数字序列中找到最长的连续等差或等比数列。算法通过分别判断等差和等比条件来解决此问题,确保正确性。
355

被折叠的 条评论
为什么被折叠?



