关于最长等差子列的问题

来源:互联网 发布:淘宝客链接后缀缩短 编辑:程序博客网 时间:2024/05/29 08:53

为初学者研究了一天

#include <iostream>

using namespace std;

 

const int n =7;

void LongSeries (int a[])

{

    int aa[n][n];

       for (int i = 0; i != n; i++)

       {

              for (int j = i+1; j != n; j++)

              {

                            aa[i][j] = a[j] - a[i];

              }

       }

 

    int b[n][n] = {0};

       int r = 0;

 

       for (int m =0; m < n-1; m++)

       {

           for (int j = m+1; j < n; j++)

              {

                     int tmp_row = j,tmp_col=j+1;

                     while ( (tmp_row< n-1)&&(tmp_col < n) )

                     {                                

                                   if(aa[m][j] == aa[tmp_row][tmp_col])

                                   {

                                          tmp_row = tmp_col;

                                          ++tmp_col;

                                          ++b[m][j];//计数,等差数列的长度

                                   }

                                   else

                                       ++tmp_col;

                     }

 

              }

                    

       }

      

       int max = b[0][0];  

    int maxrow = 0, maxcol = 0;  

 

       for (int x = 0; x < n; x++)

       {

              for (int y =0; y < n; y++)

              {

                     if (b[x][y] > max)

                     {

                            max = b[x][y];

                            maxrow = x;

                            maxcol = y;

                     }

                    

              }

       }

      

       for (int ii = 0; ii != b[maxrow][maxcol]+2; ii++)

       {

              cout<<a[maxrow]+ii*(aa[maxrow][maxcol])<<'/t';

       }

       cout<<endl;

}

 

 

int main()

{  

       int a[n]={0};

       cout<<"请输入小于100"<<n<<"个数字:"<<endl;

       cin.clear();

       for(int i=0; i!=n;++i)

       cin>>a[i];

       LongSeries (a);

       return 0;

}

 

原创粉丝点击