Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Blodi
0 / 0 / 0
Регистрация: 21.02.2017
Сообщений: 27
#1

Используя алгоритм adjacent_find, обнулить первую пару соседних элементов вектора, имеющих одинаковую чётность

07.03.2017, 08:23. Просмотров 211. Ответов 7
Метки c++ (Все метки)

Дан вектор V. Обнулить первую пару соседних элементов, имеющих одинаковую четность. Например, список 1, 2, 3, 4, 6, 8, 3, 1 должен быть преобразован следующим образом: 1, 2, 3, 0, 0, 8, 3, 1. Если список не содержит соседних элементов с одинаковой четностью, то не изменять его. Использовать алгоритм adjacent_find с параметром — функциональным объектом.

Немного не ясно можете добрые люди скинуть код пример или добротную статейку на подобный алгоритм.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2017, 08:23
Ответы с готовыми решениями:

Найти в массиве натуральных чисел все группы элементов, имеющих одинаковую сумму цифр.
Найти в массиве натуральных чисел все группы элементов, имеющих одинаковую...

Указать пары соседних элементов последовательности, имеющих противоположные знаки
Задача 2: Указать пары соседних элементов данной последовательности, имеющих...

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

Разделить каждый элемент вектора на минимальный, используя алгоритм for_each
Есть вектор, состоящий из 100 элементов. Найти минимальный элемент вектора и с...

В списке найти первую пару стоящих рядом элементов, которые в сумме дают следующий за парой элемент
в списке найти первую пару стоящих рядом элементов, которые в сумме дают...

7
Invader0x7F
Helper C/C++
281 / 158 / 122
Регистрация: 22.09.2016
Сообщений: 518
Завершенные тесты: 5
07.03.2017, 08:38 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
int main(int argc, char** argv)
{
    std::vector<int> A = { 1, 2, 3, 4, 6, 8, 3, 5 };
 
    for (auto it = A.begin(); it != A.end(); it++)
        std::cout << *it << " ";
 
    std::cout << endl;
 
    auto it = std::adjacent_find(A.begin(), A.end(), 
        [](const int& n1, const int& n2) { return (n1 % 2 == 0) && (n2 % 2 == 0); });
 
    if (it != A.end())
    {
        *it = 0; *(it + 1) = 0;
    }
 
    for (auto it = A.begin(); it != A.end(); it++)
        std::cout << *it << " ";
 
    std::cout << endl;
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
http://en.cppreference.com/w/cpp/algorithm/adjacent_find
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4402 / 2377 / 657
Регистрация: 18.10.2014
Сообщений: 4,018
07.03.2017, 09:07 #3
Цитата Сообщение от Invader0x7F Посмотреть сообщение
C++
1
[](const int& n1, const int& n2) { return (n1 % 2 == 0) && (n2 % 2 == 0); }
В задании сказано: первую пару с одинаковой четностью, а не первую пару четных.
0
Invader0x7F
Helper C/C++
281 / 158 / 122
Регистрация: 22.09.2016
Сообщений: 518
Завершенные тесты: 5
07.03.2017, 09:08 #4
А что это означает ??
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4402 / 2377 / 657
Регистрация: 18.10.2014
Сообщений: 4,018
07.03.2017, 09:09 #5
Цитата Сообщение от Invader0x7F Посмотреть сообщение
А что это означает ??
Это означает, что в искомой паре разрешается либо оба четных, либо оба нечетных. При входе 1, 2, 3, 5, 6, 8, 3, 1 правильный ответ: 1, 2, 0, 0, 6, 8, 3, 1, т.к. первая пара с одинаковой четностью - это 3, 5 (оба нечетные). А ваш вариант в такой ситуации найдет и обнулит 6, 8.
0
Invader0x7F
Helper C/C++
281 / 158 / 122
Регистрация: 22.09.2016
Сообщений: 518
Завершенные тесты: 5
07.03.2017, 09:11 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
int main(int argc, char** argv)
{
    std::vector<int> A = { 1, 2, 3, 4, 6, 8, 3, 5 };
 
    for (auto it = A.begin(); it != A.end(); it++)
        std::cout << *it << " ";
 
    std::cout << endl;
 
    auto it = std::adjacent_find(A.begin(), A.end(), 
        [](const int& n1, const int& n2) { return ((n1 % 2 == 0) && 
                   (n2 % 2 == 0)) || ((n1 % 2 != 0) && (n2 % 2 != 0)); });
 
    if (it != A.end())
    {
        *it = 0; *(it + 1) = 0;
    }
 
    for (auto it = A.begin(); it != A.end(); it++)
        std::cout << *it << " ";
 
    std::cout << endl;
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4402 / 2377 / 657
Регистрация: 18.10.2014
Сообщений: 4,018
07.03.2017, 09:13 #7
Цитата Сообщение от Invader0x7F Посмотреть сообщение
C++
1
2
[](const int& n1, const int& n2) { return ((n1 % 2 == 0) && 
                           (n2 % 2 == 0)) || ((n1 % 2 != 0) && (n2 % 2 != 0)); }
Теперь, конечно, правильно. Однако этажность зашкаливает...

C++
1
[](int n1, int n2) { return n1 % 2 == n2 % 2; }
0
gru74ik
Модератор
Эксперт CЭксперт С++
4684 / 1998 / 303
Регистрация: 20.02.2013
Сообщений: 5,302
Записей в блоге: 24
07.03.2017, 09:26 #8
 Комментарий модератора 
Blodi, пожалуйста, прочитайте правила форума.
Особое внимание обратите на следующие пункты:

.
0
07.03.2017, 09:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2017, 09:26

Как вывести название всех файлов имеющих одинаковую первую букву?
Здравствуйте. Помогите пожалуйста с задачкой: Нужно вывести название всех...

Определить номер строки и столбца, имеющих одинаковую сумму элементов
Определить номер строки и столбца, имеющих одинаковую сумму элементов. ...

Определить пару соседних элементов с суммой равной заданному числу
Дан массив целых чисел! Определить пару соседних элементов суммой равной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru