Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Deniza
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 5
#1

Удалить из массива все нечетные числа - C++

10.09.2012, 18:35. Просмотров 1493. Ответов 13
Метки нет (Все метки)

дан массив int a[100].Удалить из массива все нечетные числа
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2012, 18:35     Удалить из массива все нечетные числа
Посмотрите здесь:

Переписать числа в массив Z по условию. Удалить все нечетные числа - C++
Заданы массивы целых чисел X(n) и Y(k). Три наименьших простых числа из массива Y и числа из массива X, в которых есть цифры «1» и «9»...

Удалить из последовательности все четные и нечетные числа - C++
1. Пользователь вводит количество чисел и сами эти числа, удалить из введенной последовательности все четные. 2. Пользователь вводит...

Удалить все нечетные элементы массива - C++
Очень прошу проверьте на явность ошибок и на компиляторе задание: "Удалить все нечетные элементы". Правильно ли? #include...

Удалить из массива все нечетные элементы - C++
Динамическая память. Одномерный массив. Дан массив целых чисел. Удалите из массива все нечетные элементы.

Удалить все нечетные элементы одномерного массива - C++
1) Удалить все нечетные элементы.

Удалить из массива только повторяющиеся нечетные числа - C++
На данном этапе удаляются все нечетные числа, подскажите как сделать так, что бы удалялись только повторяющиеся нечетные числа. Тоесть 5 5...

Перемножить все нечетные числа массива - C++
Вычислить произведение положительных элементов массива С(25) , имеющих нечетные индексы. Вот такое задание, я сделал массив, потом сделал...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 18:36     Удалить из массива все нечетные числа #2
Удалить из массива все четные элементы
Петррр
5942 / 3379 / 335
Регистрация: 28.10.2010
Сообщений: 5,926
10.09.2012, 18:53     Удалить из массива все нечетные числа #3
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
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <random>
#include <functional>
 
class is_odd: public std::unary_function<int, bool>
{
public:
    bool operator ()(const int& num)
    {
        return num % 2 == 1;
    }
};
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dist(0, 10);
    std::vector<int> vec(100);
    std::generate(vec.begin(), vec.end(), std::bind(dist, gen));
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout.put('\n');
    vec.erase(std::remove_if(vec.begin(), vec.end(), is_odd()), vec.end());
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
}
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 18:55     Удалить из массива все нечетные числа #4
Цитата Сообщение от Петррр Посмотреть сообщение
return num % 2 == 1;
-3 % 2 == -1
Catstail
Модератор
22432 / 10837 / 1765
Регистрация: 12.02.2012
Сообщений: 17,951
10.09.2012, 19:57     Удалить из массива все нечетные числа #5
Вот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
 
int main(int argc, char* argv[])
{
    int Arr[]={1,2,3,-8,5,56,78,13,0,0,-5,5,6};
    int n,i,j;
    n=sizeof(Arr)/sizeof(int);
    cout << "Initial array:" << endl;
    for (i=0; i<n; i++) cout << Arr[i] << " ";
    cout << endl;
    j=0;
    for (i=0; i < n; i++)
        if ((Arr[i]%2) == 0)
            Arr[j++]=Arr[i];
    n=j;
    cout << "Array after filter:" << endl;
    for (i=0; i<n; i++) cout << Arr[i] << " ";
    cout << endl;
    return 0;
}
"и вся любовь..."
Петррр
5942 / 3379 / 335
Регистрация: 28.10.2010
Сообщений: 5,926
10.09.2012, 20:01     Удалить из массива все нечетные числа #6
C++
13
return num & 1;
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 20:19     Удалить из массива все нечетные числа #7
Цитата Сообщение от Catstail Посмотреть сообщение
Вот:
У Вас похожий метод
Удалить из массива все четные элементы.
Но есть еще более быстрый алгоритм

Существует самый оптимальный алгоритм решения данной задачи. Если для алгоритмов сортировок, например, все зависит от имеющихся данных, то здесь имеется универсальный алгоритм. То есть если требуется удалить все элементы массива, удовлетворяющие некоторому условию, то лучше использовать самый быстрый алгоритм.
Catstail
Модератор
22432 / 10837 / 1765
Регистрация: 12.02.2012
Сообщений: 17,951
10.09.2012, 20:25     Удалить из массива все нечетные числа #8
Цитата Сообщение от Thinker Посмотреть сообщение
Существует самый оптимальный алгоритм решения данной задачи
- куда же оптимизировать?

Неужели, есть способ быстрее этого:

C++
1
2
3
4
j=0;
for (i=0; i < n; i++)
     if ((Arr[i]%2) == 0)
         Arr[j++]=Arr[i];
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 20:26     Удалить из массива все нечетные числа #9
Цитата Сообщение от Catstail Посмотреть сообщение
- куда же оптимизировать?
Есть, поверьте. Представьте, что у Вас массив не чисел, а довольно громоздких объектов, то лишние перезаписывания ни к чему. И такой алгоритм имеется То есть в том алгоритме ни одного лишнего перемещения элементов в массиве
Catstail
Модератор
22432 / 10837 / 1765
Регистрация: 12.02.2012
Сообщений: 17,951
10.09.2012, 20:31     Удалить из массива все нечетные числа #10
Цитата Сообщение от Thinker Посмотреть сообщение
Представьте, что у Вас массив не чисел
:

1) в условии-то массив чисел...
2) пусть это будут сколь-угодно сложные объекты, но если они образуют массив, то как обойтись без копий? И какие копии считать лишними?
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 20:33     Удалить из массива все нечетные числа #11
Причем тут массив чисел. Я Вам про алгоритм, для которого не важно что там. А про громоздкие объекты к тому, что незачем перезаписывать те числа (объекты), которые должны оставаться на своем месте То есть про алгоритм, который перемещает только те элементы массива, которые должны "переехать", оставляя все остальные элементы на местах. Просто надо подойти к этой задачи несколько математически и понять, что такой алгоритм существует и он прост.
Петррр
5942 / 3379 / 335
Регистрация: 28.10.2010
Сообщений: 5,926
10.09.2012, 20:40     Удалить из массива все нечетные числа #12
std::partition?
Catstail
Модератор
22432 / 10837 / 1765
Регистрация: 12.02.2012
Сообщений: 17,951
10.09.2012, 20:44     Удалить из массива все нечетные числа #13
Цитата Сообщение от Thinker Посмотреть сообщение
То есть про алгоритм, который перемещает только те элементы массива, которые должны "переехать"
- тут трудно с Вами не согласиться. Модифицирую свой код:

C++
1
2
3
4
5
6
7
j=0;
for (i=0; i < n; i++)
     if ((Arr[i]%2) == 0)
        if (i != j)
            Arr[j++]=Arr[i];
        else
            j++;
Пойдет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2012, 20:47     Удалить из массива все нечетные числа
Еще ссылки по теме:

Найти максимальный элемент массива, и удалить после него все нечетные элементы - C++
В массиве A(n) определить максимальный элемент .удалить после максимального все нечетные элементы

Вывести все четные и нечетные числа массива - C++
Здравствуйте!!! У меня есть такое задание не могу решать может поможете?? 1. Надо заполнить все дни января(31 день), в которых был...

создать одномерный массив заполненый случайными цыфрами. удалить все нечетные элементы массива. среда PascalABC - C++
создать одномерный массив заполненый случайными цыфрами. удалить все нечетные элементы массива. среда PascalABC

Не нарушая порядка следования нужно расположить в начале массива все четные числа а затем нечетные - C++
Помогите пожалуйста с написанием программы. Не нарушая порядка следования нужно расположить в начале массива все четные числа а затем...

Удалить из массива все числа, у которых все цифры, встречающиеся в их записи, одинаковы - C++
Дан массив целых положительных чисел a1, a2, …аN. Удалить из него все числа, у которых все цифры, встречающиеся в их записи, одинаковы. ...


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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 20:47     Удалить из массива все нечетные числа #14
Что-то похожее, но можно с меньшим количеством проверок. В этой ветке похожая задача
Нужно из массива удалить нулевые элементы
в посте #11 алгоритм

Для данной задачи:
C++
1
2
3
4
for (m = 0; m < n && !(a[m] & 1); m++)
   ;
for(i = m + 1;  i < n; i++) 
  if (a[i] & 1)  a[m++] = a[i];
После работы алгоритма в m останется "новый" размер массива и ни одного лишнего перезаписывания
Добавлено через 33 секунды
Цитата Сообщение от Петррр Посмотреть сообщение
std::partition?
немного не то
Yandex
Объявления
10.09.2012, 20:47     Удалить из массива все нечетные числа
Ответ Создать тему
Опции темы

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