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

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

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

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

04.11.2013, 01:01. Просмотров 2831. Ответов 14
Метки нет (Все метки)

Удалить из массива все четные числа не используя вспомогательный массив.

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»;
это с ипользованием вспомогательного , помогите решить без него (удаление из первоначального массива эллементов со смещением последующих) , чтобы можно было вывести изменённый массив А
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 01:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить из массива все четные числа (C++):

Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый массив переписать все четные - C++
Помогите сделать данную программу: Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый массив переписать...

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

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

Из числа n удалить все четные цифры - C++
Подскажите как решить задачу на С. Из натурального числа n нужно удалить все четные цифры и записать результат. Добавлено через 16...

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

Удалить из массива все четные элементы - C++
Как удалить из массива все четные элементы?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;
}
Проверьте, корректно ли работает... только все пустые ячейки в конце забиваются последним значением... можете его занулить
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]<<';';
Попробуй так. Зануление в общем необязательно, потому что х показывает количество элементов в итоговом масиве и его значение можно использовать в дальнейших операциях с даными.
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 02:11 #4
используйте список
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
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 << " ";
}
0
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
04.11.2013, 02:32 #6
Цитата Сообщение от Хулиган Посмотреть сообщение
используйте список
Вряд ли ТС дошел до списков в изучении С++.
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 02:50 #7
Цитата Сообщение от RQdan Посмотреть сообщение
Вряд ли ТС дошел до списков в изучении С++.
ну без stl, используя статические массивы не очень красиво получится
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
04.11.2013, 02:57 #8
На статическом массиве это вообще не получится.
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 03:04 #9
не, ну в смысле удаляемым элементам присвоить уникальное значение. и все
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
04.11.2013, 03:07 #10
А есть гарантии, что у неудаляемых элементов не будет случайно этого "уникального значения" ? И в чем же здесь состоит удаление? Добавить условие на каждую операцию для работы с этим массивом?
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
04.11.2013, 03:24 #11
Цитата Сообщение от MrGluck Посмотреть сообщение
И в чем же здесь состоит удаление?
ну это единственный вариант с использованием одного статического массива, как это делает ТС
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
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;
}
0
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]<<';';
этот способ не подходит , как я писал выше мне нужно получить новый массив А , а не просто вывести нечётные элементы... =(
0
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;
}
вот как то так...
0
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])
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 11:40
Привет! Вот еще темы с ответами:

Удалить из массива все четные элементы - C++
дан массив int a. удалить из массива все четные элементы

Сформировать стек и удалить из него все четные числа - C++
Разработать программу формирования стека, содержащего целые положительные числа, и его преобразования путем удаления из него всех четных...

Удалить из бинарного файла, в котором записаны целые числа все четные элементы. - C++
Решите очень нужно. Удалить из бинарного файла, в котором записаны целые числа все четные элементы.

Удалить из бинарного файла, в котором записаны целые числа все четные элементы - C++
Удалить из бинарного файла, в котором записаны целые числа все четные элементы


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.11.2013, 11:40
Ответ Создать тему
Опции темы

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