Grade 9 · One-dimensional arrays (vectors)Citește în română
Checking a symmetric array
Original: Verificarea unui vector simetric
O(n)C++1753 lines2 examples
The idea
An array is symmetric (a palindrome) if v[i] = v[n - i + 1] for every i. We compare the pairs from both ends towards the middle and stop at the first pair that differs.
Original description (Romanian)
Un vector este simetric (palindrom) dacă v[i] = v[n - i + 1] pentru orice i. Comparăm perechile de la capete spre mijloc și ne oprim la prima pereche diferită.
- Complexity
- O(n)
- Grade
- Grade 9 (Clasa a IX-a)
Examples
Example 1
Input
5 1 2 3 2 1
Expected output
DA
Example 2
Input
4 1 2 3 1
Expected output
NU
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Verificarea unui vector simetric
* Clasa: 9
* Capitol: Tablouri unidimensionale (vectori)
* Descriere: Un vector este simetric (palindrom) dacă v[i] = v[n - i + 1]
* pentru orice i. Comparăm perechile de la capete spre mijloc și ne
* oprim la prima pereche diferită.
* Complexitate: O(n)
*
* Exemplu
* Intrare:
* 5
* 1 2 3 2 1
* Ieșire: DA
*
* Exemplu
* Intrare:
* 4
* 1 2 3 1
* Ieșire: NU
*/
#include <iostream>
using namespace std;
int v[1001];
int main()
{
int n;
bool simetric = true;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
}
for (int i = 1; i <= n / 2 && simetric; i++)
{
if (v[i] != v[n - i + 1])
{
simetric = false;
}
}
if (simetric)
{
cout << "DA" << '\n';
}
else
{
cout << "NU" << '\n';
}
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.