В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
karp22rus2
karp22rus2
20.05.2020 05:29 •  Информатика

определи соответствующий числу 5 знак в режиме сравнение приближение датчика ультразвука

Показать ответ
Ответ:
мандаринылюблю
мандаринылюблю
06.05.2020 03:49

2018

Сообщений: 27

15.03.2019, 18:38 3

Лучший ответ Сообщение было отмечено CyberNinjaProg как решение

Решение

Я бы мог тебе написать готовый код, но для начала просто алгоритм объясню.

Во первых, симметричность такой последовательности разобъём на 2 типа - чётная и нечётная.

Чётная последовательность делиться на две одинаковые отражённые горизонтально части. Например, "12122121".

Нечётная делиться таким же образом, только посередине есть цифра не имеющая пары. Например, "123454321".

Соответственно нам надо проверить входную последовательность на возможность создать наикратчайшую симметричную последовательность одного из двух типов.

Конкретный алгоритм следующий:

//Для чётно-симметричной последовательности

Берём половину входной последовательности (если её длина нечётная, берём с округлением в большую сторону), и начинаем по одному её элементу, от последнего и до первого, сравнивать их с элементами второй половины, но только взятых в порядке слева-направо.

То-есть, от последовательности 12122, берём 121, и сравниваем с 22: i[2] == i[3] (1 == 2).

Сравниваем так до тех пор, пока последовательность не закончиться. Тогда, оставшаяся несрАвненной последовательность цифр взятой в порядке справа налево и будет ответом (вместе с количеством этих цифр).

Если же при сравнении, цифры оказались разными, начинаем всё сначала, только с цифры на одну правее.

То-есть теперь берём уже не 121, а 1212, и делаем всё предыдущее снова. Если последовательность закончилась, то есть если мы например взяли уже 12345 от 12345, то сравнивать уже ничего не нужно, надо просто взять всю последовательность в обратном порядке - "1234554321".

//Для нечётно-симметричной последовательности

Делаем всё то же самое, что и для чётно-симметричной последовательности, только начинаем сравнивать не с цифры, следующей той, у которой мы разделили, а через одну.

То-есть, для входной последовательности 12345, берём 123 и начинаем сравнивать цифру 3 с цифрой 5, а не с цифрой 4.

Если же последовательность закончилась, берём всю последовательность кроме последней цифры в обратном порядке, это и будет ответ.

//Итог

Для того, чтобы найти правильный ответ, надо найти и чётную, и нечётную последовательности. Затем сравнить длину обоих ответов. Кратчайший ответ будет верным.

0,0(0 оценок)
Ответ:
Mashatry
Mashatry
14.10.2022 04:34

#include <iostream>

using namespace std;

int main()

{

   int N;

   cin >> N;

   int* arr = new int[N];

   for (int i(0); i < N; ++i) cin >> arr[i];

   int count(N - 1);

   int result = 0;

   for (; count >= 0 && result < arr[count]; --count) {

       if (count > 0) result += arr[count] - arr[count - 1];

   }

   int sum = 0;

   for (int i(count + 1); i < N; ++i) sum += arr[i];

   result = sum / (N - count);

   if (sum > result*(N - count)) ++result;

   cout << result;

}

Объяснение:

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота