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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Tashimoto
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 3
04.11.2013, 01:01     Удалить из массива все четные числа #1
Удалить из массива все четные числа не используя вспомогательный массив.

C++
1
2
3
4
5
6
7
int b[12];
     int i,j=0;
     for(i=0;i<n;i++)
         if(a[i]%2!=0){b[j]=a[i];j++;}
 
          for(i=0;i<j;i++) cout<<b[i]<<« «;
              cout<<«\n»;
это с ипользованием вспомогательного , помогите решить без него (удаление из первоначального массива эллементов со смещением последующих) , чтобы можно было вывести изменённый массив А
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 01:01     Удалить из массива все четные числа
Посмотрите здесь:

из числа n удалить все четные цифры C++
Удалить из бинарного файла, в котором записаны целые числа все четные элементы C++
Удалить из бинарного файла, в котором записаны целые числа все четные элементы. C++
удалить из массива все четные элементы C++
В одномерном массиве, элементы которого -целые числа, удалить все четные числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
04.11.2013, 01:15     Удалить из массива все четные числа #2
Tashimoto,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    const int n = 10;
    int x = 0;
    int a[n]={1,2,3,4,5,6,7,8,9,10};
    for (int i = 0; i < n-x; i++)
        if (a[i]%2 == 0)
        {
            x++;
            for (int j = i+1;j<n;j++)
                a[j-1]=a[j];
            i--;
        }
    for (int i = 0; i < n-x; i++)
        cout << a[i] << " ; ";
    return 0;
}
Проверьте, корректно ли работает... только все пустые ячейки в конце забиваются последним значением... можете его занулить
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
04.11.2013, 02:01     Удалить из массива все четные числа #3
C++
1
2
3
4
5
6
7
8
9
10
int x=0;
for(int i=0;i<n;i++)
{
   a[x]=a[i];
   if(a[i]%2!=0) x++; 
}
for(int i=x;i<n;i++)
   a[i]=0;
for(int i=0;i<x;i++)
   cout<<a[i]<<';';
Попробуй так. Зануление в общем необязательно, потому что х показывает количество элементов в итоговом масиве и его значение можно использовать в дальнейших операциях с даными.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 02:11     Удалить из массива все четные числа #4
используйте список
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
04.11.2013, 02:14     Удалить из массива все четные числа #5
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    std::vector<int> v = {1, 2, 3, 4, 5, 6};
    v.erase(std::remove_copy_if(v.begin(), v.end(), v.begin(), [](const int x) {return ~x & 1; }), v.end());
    for (auto &x: v)
        std::cout << x << " ";
}
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
04.11.2013, 02:32     Удалить из массива все четные числа #6
Цитата Сообщение от Хулиган Посмотреть сообщение
используйте список
Вряд ли ТС дошел до списков в изучении С++.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 02:50     Удалить из массива все четные числа #7
Цитата Сообщение от RQdan Посмотреть сообщение
Вряд ли ТС дошел до списков в изучении С++.
ну без stl, используя статические массивы не очень красиво получится
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
04.11.2013, 02:57     Удалить из массива все четные числа #8
На статическом массиве это вообще не получится.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 03:04     Удалить из массива все четные числа #9
не, ну в смысле удаляемым элементам присвоить уникальное значение. и все
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
04.11.2013, 03:07     Удалить из массива все четные числа #10
А есть гарантии, что у неудаляемых элементов не будет случайно этого "уникального значения" ? И в чем же здесь состоит удаление? Добавить условие на каждую операцию для работы с этим массивом?
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 03:24     Удалить из массива все четные числа #11
Цитата Сообщение от MrGluck Посмотреть сообщение
И в чем же здесь состоит удаление?
ну это единственный вариант с использованием одного статического массива, как это делает ТС
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
04.11.2013, 04:04     Удалить из массива все четные числа #12
Есть вариант занести все ненужные элементы в конец и уменьшить значение переменной, которая показывает условный конец последовательности на количество перенесенных.
Но удалить из статического массива все равно не выйдет.

Добавлено через 10 минут
Есть способ удалить элементы их динамического массива вот таким вот грязным способом:
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
35
36
37
38
39
40
41
42
43
#include <iostream>
 
void foo(int *a, int& N)
{
    int counter = 0;
    for (int i=0; i < N; i++)
        counter += (~a[i] & 1);
 
    int *b = new int[counter];
    counter = 0;
 
    for (int i=0; i < N; i++)
        if (~a[i] & 1)
            b[counter++] = a[i];
 
    N = counter;
    delete[] a;
    a = new int[N];
    for (int i=0; i < N; i++)
        a[i] = b[i];
 
    delete[] b;
}
 
void print(const int *a, const int N)
{
    for (int i=0; i < N; i++)
        std::cout << a[i] << " ";
    std::cout << std::endl;
}
 
 
int main()
{
    int N = 5;
    int *a = new int[N];
    for (int i=0; i < N; i++)
        a[i] = i+1;
    print(a, N);
    foo(a, N);
    print(a, N);
    delete[] a;
}
Tashimoto
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 3
04.11.2013, 11:34  [ТС]     Удалить из массива все четные числа #13
C++
1
2
3
4
5
6
7
8
9
10
int x=0;
for(int i=0;i<n;i++)
{
   a[x]=a[i];
   if(a[i]%2!=0) x++; 
}
for(int i=x;i<n;i++)
   a[i]=0;
for(int i=0;i<x;i++)
   cout<<a[i]<<';';
этот способ не подходит , как я писал выше мне нужно получить новый массив А , а не просто вывести нечётные элементы... =(
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
04.11.2013, 11:38     Удалить из массива все четные числа #14
Tashimoto,

Не по теме:

вас не поймешь... вы же сами просили без каких либо дополнительных массивов. Ну, если возьмете мой код, то там в цикле от i=0 до i<n-x можно считать числа в новый массив


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    const int n = 10;
    int x = 0;
    int a[n]={1,2,3,4,5,6,7,8,9,10};
    for (int i = 0; i < n-x; i++)
        if (a[i]%2 == 0)
        {
            x++;
            for (int j = i+1;j<n;j++)
                a[j-1]=a[j];
            i--;
        }
   int* b = new int[n-x];
 for (int i = 0; i < n-x; i++)
        b[i] = a[i];
delete []b;    
return 0;
}
вот как то так...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 11:40     Удалить из массива все четные числа
Еще ссылки по теме:

В одномерном массиве, элементы которого - целые числа, удалить все четные числа C++
C++ Сформировать стек и удалить из него все четные числа

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

Или воспользуйтесь поиском по форуму:
Tashimoto
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 3
04.11.2013, 11:40  [ТС]     Удалить из массива все четные числа #15
Цитата Сообщение от MrGluck Посмотреть сообщение
Есть вариант занести все ненужные элементы в конец и уменьшить значение переменной, которая показывает условный конец последовательности на количество перенесенных.
Но удалить из статического массива все равно не выйдет.

Добавлено через 10 минут
Есть способ удалить элементы их динамического массива вот таким вот грязным способом:
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
35
36
37
38
39
40
41
42
43
#include <iostream>
 
void foo(int *a, int& N)
{
    int counter = 0;
    for (int i=0; i < N; i++)
        counter += (~a[i] & 1);
 
    int *b = new int[counter];
    counter = 0;
 
    for (int i=0; i < N; i++)
        if (~a[i] & 1)
            b[counter++] = a[i];
 
    N = counter;
    delete[] a;
    a = new int[N];
    for (int i=0; i < N; i++)
     a[i] = b[i];
 
    delete[] b;
}
 
void print(const int *a, const int N)
{
    for (int i=0; i < N; i++)
        std::cout << a[i] << " ";
    std::cout << std::endl;
}
 
 
int main()
{
    int N = 5;
    int *a = new int[N];
    for (int i=0; i < N; i++)
        a[i] = i+1;
    print(a, N);
    foo(a, N);
    print(a, N);
    delete[] a;
}
нужно без использования вспомогательново массива (a[i] = b[i])
Yandex
Объявления
04.11.2013, 11:40     Удалить из массива все четные числа
Ответ Создать тему
Опции темы

Текущее время: 13:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru