GVA SUPPORT

Відповідь на запитання № 1333915281
Text:
	ФІО = Горбаченко В.А.

 Запитання://---------------------------------------------------------------------------

#pragma hdrstop
#include <iostream>
/*
AK p01 z02
Задано числовий масив A[m]. Знайти відрізок масиву максимальної довжини, в якому перше
число дорівнює останньому, друге передостанньому тощо. Надрукувати довжину цього
відрізку. Програму написати з використанням виразів над вказівниками.
*/
#include <stdio.h>
#include <conio.h>
// розміри масиву
//---------------------------------------------------------------------------

#pragma argsused
using namespace std;
int GetMaxSymLength(int *A,int p,int n)
// повертає максимальну довжину симметрії.
// приймає вказівник на масив, індекс початку, кількість елементів послідовності.
// повертає 0 - якшо не симметрично
{
        for (int i = 0 ; i <= n/2 ; i++)
        {
                if ( *(A+p+i) !=  *(A+p+n-i) ) return 0;
        }
        return n+1;
}
int main(int argc, char* argv[])
{
        int M;
     do{
          cout<<"Matrix\n Enter M = ";
          cin>>M;
          if (M<=0)  cout<<"ERROR : M > 0 !\n";
     }while (M<=0); // не даємо вийти, поки не буде введено m>0

        int *A = new int [M];
        for (int i = 0 ; i < M ; i++ )
        {
                cout<<"a ["<<i<<"] = ";
                cin>>(*(A+i));
        }
        int p1 = -1, p2 = -1, length = 0; // позиція початку та кінця та довжина того, що шукаємо
        // врахуємо те, що послідовностей з однаковими довжинами може бути декілька
        int count_rep = 0;

        for ( int i = 0 ; i < M; i++ )
        { // пошук повторень
                for ( int j = 1 ; j < M - i ; j++ )
                {
//                        cout<<(*(A+i+j) )<<" ";
                        if (*(A+i) == *(A+i+j))
                        {
                                int maybemax = GetMaxSymLength(A,i,j);
                                if (maybemax>length)
                                {
                                        length = maybemax;
                                        p1 = i;
                                        p2 = i + j+1;
                                        count_rep++;
                                }
                                if (maybemax==length) count_rep++;
                        }


                }
//                cout<<endl;
        }
        cout<<"LENGTH is "<<length<<endl;
// ЦІ СТРОКИ ЗАЙВІ, АЛЕ КРАСИВО ПРАЦЮЄ (виводить те, співпадіння в квадратних скобках)
        if (count_rep == 1)
        {
                for ( int i = 0 ; i < M ; i++ )
                { // вивід масиву
                        if (length!=0 && i== p1) cout<<" [";
                        cout<< (*(A+i)) <<" ";
                        if (length!=0 && i== p2) cout<<"] ";                        
                }
        }
        else
        {
                for ( int i = 0 ; i < M; i++ )
                {
                        for ( int j = 1 ; j < M - i ; j++ )
                        {
                                if (*(A+i) == *(A+i+j))
                                {
                                        int maybemax = GetMaxSymLength(A,i,j);
                                        if (maybemax==length)
                                        {
                                                p1 = i;
                                                p2 = i + j;
                                                for ( int z = 0 ; z < M ; z++ )
                                                { // вивід масиву
                                                        if (length!=0 && z== p1) cout<<"[ ";
                                                        cout<< (*(A+z)) <<" ";
                                                        if (length!=0 && z== p2) cout<<"] ";
                                                }
                                                cout<<endl;

                                        }
                                }
                        }
                }

        }
// END OF ЦІ СТРОКИ ЗАЙВІ, АЛЕ КРАСИВО ПРАЦЮЄ

        cout<<endl;

        cout<<endl;
        delete []A;

        system("PAUSE");
}
//---------------------------------------------------------------------------


====================================	
Ваша відповідь