Дано целочисленный массив из n элементов. проверить, если массив является симметричным, то в каждой из его половин изменить порядок элементов на обратный. в противном случае его половины поменять местами. с++

кира671 кира671    3   22.09.2019 05:01    1

Ответы
brukaya brukaya  27.08.2020 01:48
#include <iostream>
#include <locale>

using namespace std;

int main()
{
  setlocale(LC_ALL,"Rus");
  int n;
  cout << "n = ", cin >> n;
  int *A = new int[n];
  cout << " введите массив из "<< n <<" элементов:\n";
  for (int i = 0; i < n; i++)
  {
    cin >> A[i];
  }
  cout <<"\nПолучившийся массив: [";
  for (int i = 0; i < n; i++)
  {
    cout << " " << A[i];
  }
 
  bool Simmetriya = true;
  for (int i = 0; i <= (int)(n/2); i++)
  {
    if (A[i] != A[n-i-1])
    {
      Simmetriya = false;
      break;
    }
  }
  cout << (Simmetriya?" ] симметричен":" ] НЕ симметричен") << "\n";
  if (Simmetriya)
  {
    for (int i = 0; i < (int)(n/2); i++)
    {
      for (int j = i; j < (int)(n/2); j++)
      {
        swap(A[i],A[j]);
        swap(A[n-i-1],A[n-j-1]);
      }
    }
  }
  else
  {
    for (int i = 0; i < (int)(n/2); i++)
    {
      swap(A[i],A[(int)(n/2)+n%2+i]);
    }
  }
  for (int i = 0; i < n; i++)
  {
    cout << A[i] << " ";
  }
  cout << '\n';
  return 0;
}
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика