HDU 5328 Problem Killer

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

分析:给你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;
  }


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值