Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

дан массив int a[100].Удалить из массива все нечетные числа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2012, 18:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить из массива все нечетные числа (C++):

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

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

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

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

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

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

13
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 18:36 #2
Удалить из массива все четные элементы
1
Петррр
5970 / 3407 / 337
Регистрация: 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;
}
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 18:55 #4
Цитата Сообщение от Петррр Посмотреть сообщение
return num % 2 == 1;
-3 % 2 == -1
1
Catstail
Модератор
22838 / 11204 / 1812
Регистрация: 12.02.2012
Сообщений: 18,443
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;
}
"и вся любовь..."
1
Петррр
5970 / 3407 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
10.09.2012, 20:01 #6
C++
13
return num & 1;
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 20:19 #7
Цитата Сообщение от Catstail Посмотреть сообщение
Вот:
У Вас похожий метод
Удалить из массива все четные элементы.
Но есть еще более быстрый алгоритм

Существует самый оптимальный алгоритм решения данной задачи. Если для алгоритмов сортировок, например, все зависит от имеющихся данных, то здесь имеется универсальный алгоритм. То есть если требуется удалить все элементы массива, удовлетворяющие некоторому условию, то лучше использовать самый быстрый алгоритм.
0
Catstail
Модератор
22838 / 11204 / 1812
Регистрация: 12.02.2012
Сообщений: 18,443
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];
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 20:26 #9
Цитата Сообщение от Catstail Посмотреть сообщение
- куда же оптимизировать?
Есть, поверьте. Представьте, что у Вас массив не чисел, а довольно громоздких объектов, то лишние перезаписывания ни к чему. И такой алгоритм имеется То есть в том алгоритме ни одного лишнего перемещения элементов в массиве
0
Catstail
Модератор
22838 / 11204 / 1812
Регистрация: 12.02.2012
Сообщений: 18,443
10.09.2012, 20:31 #10
Цитата Сообщение от Thinker Посмотреть сообщение
Представьте, что у Вас массив не чисел
:

1) в условии-то массив чисел...
2) пусть это будут сколь-угодно сложные объекты, но если они образуют массив, то как обойтись без копий? И какие копии считать лишними?
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2012, 20:33 #11
Причем тут массив чисел. Я Вам про алгоритм, для которого не важно что там. А про громоздкие объекты к тому, что незачем перезаписывать те числа (объекты), которые должны оставаться на своем месте То есть про алгоритм, который перемещает только те элементы массива, которые должны "переехать", оставляя все остальные элементы на местах. Просто надо подойти к этой задачи несколько математически и понять, что такой алгоритм существует и он прост.
0
Петррр
5970 / 3407 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
10.09.2012, 20:40 #12
std::partition?
0
Catstail
Модератор
22838 / 11204 / 1812
Регистрация: 12.02.2012
Сообщений: 18,443
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++;
Пойдет?
0
Thinker
Эксперт С++
4228 / 2202 / 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?
немного не то
0
10.09.2012, 20:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2012, 20:47
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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