Предмет: Информатика, автор: ilai2541358

Симметричная последовательность С++
Последовательность чисел назовем симметричной, если она одинаково читается как слева направо, так и справа налево. Например, следующие последовательности являются симметричными: 1 2 3 4 5 4 3 2 1 1 2 1 2 2 1 2 1 Вашей программе будет дана последовательность чисел. Требуется определить, какое минимальное количество и каких чисел надо приписать в конец этой последовательности, чтобы она стала симметричной.

Входные данные

Сначала вводится число N — количество элементов исходной последовательности (1≤N≤100). Далее через пробел идут N чисел — элементы этой последовательности, натуральные числа от 1 до 9.

Выходные данные

Выведите сначала число M — минимальное количество элементов, которое надо дописать к последовательности, а потом M чисел (каждое — от 1 до 9) — числа, которые надо дописать к последовательности.

Примеры
Ввод
Вывод
5
1 2 3 4 5
4
4 3 2 1
9
1 2 3 4 5 4 3 2 1
0
5
1 2 1 2 2
3
1 2 1


fkid2006: 1 2 3 4 5 6 7 8 12 15 18 19 и 20(код, который надо доделать)
fkid2006: там надо доделать, я с питона пытался перевести в с++
fkid2006: #include
using namespace std;

int main()
{
int n;
cin >> n;
int m = 2 * n - 1;
int field = [[0] * m for _ in range(m)];
field[0][0] = 1;
for x in range(m){
for y in range(m){
if m >= y - x + n > 0{
if x > 0{
field[y][x] += field[y][x - 1];
}

if y > 0{
field[y][x] += field[y - 1][x];
}

if x > 0 and y > 0{
field[y][x] += field[y - 1][x - 1];
}
}
}
cout << (field[m - 1][m - 1]);
return 0;
}
fkid2006: тут немного на питоне
fkid2006: я забыл дописать
fkid2006: iostream
fkid2006: если вдруг что получиться, скинь пж мне

Ответы

Автор ответа: MaksMega
1

Ответ:

сори что поздно но вроде бы я решил ток щас

Объяснение:

#include <iostream>

#include <vector>

using namespace std;

int main()

{

   int a;

   cin >> a;

   vector <int> v(a);

   vector <int> ans;

   vector <int> empty;

   for (int i = 0; i < v.size(); i++) {

       cin>>v[i];

   }

   int d = a - 1;

   bool isparity = a%2 == 1;

   for (int i = 0; i < v.size(); i++) {

       if (v[i] == v[d] && (i!=d || (isparity && i == a/2))) {

           d--;

           

       }

       else if (i!=d && i!=a-1) {

           ans = empty;

           for (int j = 0; j <= i; j++) {

               ans.push_back(v[j]);

           }

       }

       else {

           ans = empty;

           for (int j = 0; j < i; j++) {

               ans.push_back(v[j]);

           }

       }

   }

   cout<<ans.size()<<endl;

   for (int i = ans.size()- 1; i >= 0; i--) {

       cout<<ans[i]<<" ";

   }

   return 0;

}


MaksMega: жаль протестить нельзя
Похожие вопросы
Предмет: Биология, автор: kojobergenovana