Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С++ Программирование. Помогите пожалуйста

Октавиан Негруша Ученик (70), на голосовании 2 года назад
Условие

Последовательность чисел назовем симметричной, если она одинаково читается как слева направо, так и справа налево. Например, следующие последовательности являются симметричными:

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) — числа, которые надо дописать к последовательности.

Самое лучшее смотреть на скриншот)
Дополнен 2 года назад
Могу показать что я решил. Но у меня частичное решение)

Вот код:

#include

using namespace std;
int main(){

int n;
int data[201];
cin >> n;
for (int i = 0; i < n; i++){
cin >> data[i];
}
int index = n;
for (int i = n/2; i < n; i++){
int count = 0;
for (int j = 0; j < (n-i) ; j++){
if (data[i-j] == data[i+j]){
count++;
}else{
count = 0;
break;
}
}
if (count !=0) {
index = i;
break;
}
}

int t = n - index;

cout << index - t+1 <=0;i--){
cout << data[i] <<" ";
}

return 0;
}
Голосование за лучший ответ
Dmitry Просветленный (22264) 2 года назад
#include <iostream>

using namespace std;

bool isPalindrome(const int* first, const int* last) {
    for (; first < last; ++first, --last)
        if (*first != *last)
            return false;
    return true;
}

int main() {
    int data[100], n;
    cin >> n;
    for (int i = 0; i < n; ++i)
        cin >> data[i];
    int count = 0;
    while (!isPalindrome(data + count, data + n - 1))
        ++count;
    cout << count << '\n';
    while (--count >= 0)
        cout << data[count] << ' ';
    return 0;
}

P.S. Что они подразумевают под "частичностью"? Плохую скорость?
Октавиан НегрушаУченик (70) 2 года назад
Сможешь ещё одну задачу решать? Пж
Батаев Дмитрий Просветленный (22180) 2 года назад
это просто если условиться, что это ПОЛОВИНА последовательности 12345 значит 4321... Это есть частичность, так?
Батаев ДмитрийПросветленный (22180) 2 года назад
Тогда так поступим 123454 и вторая половина 321
Похожие вопросы