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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
MsHassium
2 / 2 / 0
Регистрация: 04.03.2012
Сообщений: 21
#1

Удаление символа из одномерного массива! - C++

29.03.2012, 19:33. Просмотров 1187. Ответов 11
Метки нет (Все метки)

Дан одномерный массив, элементы которого - целые числа. Удалите из него все четные числа.
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
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
int main()
{freopen("input.txt", "rt", stdin);
  freopen("output.txt", "wt", stdout);
        int n,nmax;
        cin>>n;
        int *a=new int [n];
        for(int i=0;i<n;i++)
            cin>>a[i];
        for (int i=0;i<n;i++)
            if((a[i]%2)==0)
            {
                nmax=i;
                for(int j=nmax; j<n-1;j++)
                {
                    a[j]=a[j+1];
                    n--;
                    
                }
            }
            for (int i=0;i<n;i++)
            cout<<a[i]<<" ";
            return 0;
}
на вход подаю
4 /*кол-во элементов*/
9 8 7 5 /элементы массива*/
На выход должно выйти
9 7 5
Выходит
9 7 7
В чем проблема???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 19:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление символа из одномерного массива! (C++):

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

удаление одномерного массива - C++
Помогите пожалуйста составить алгоритм удаление одномерного массива с max значением. Массив состоит из 10 элементов и константы....

Удаление символа из массива - C++
Следует удалить из массива требуемый символ, а остальные символы продублировать #include &lt;iostream&gt; #include &lt;cstring&gt; using...

Удаление элемента из одномерного массива - C++
Задан массив целых чисел. Удалить k-й элемент. Помогите пожалуйста решить. Добавлено через 7 минут #include&lt;iostream&gt; int...

Удаление элементов из одномерного массива - C++
Как изменить программу, чтобы она удаляла нечетные элементы? #include&lt;iostream&gt; #include &lt;ctime&gt; const int N = 10; using...

Удаление динамического одномерного массива - C++
Я в шоке оказывается надо еще удалять массив из памяти когда его создаешь. Всегда писал на шарпе таких проблем там не было а тут на тебе...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
29.03.2012, 19:36 #2
в Вашем коде не хочеться разбираться!

вот рабочий код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            if(mas[j] % 2 == 0)                                                     
            {
                for(int k = j; k < n; k++)
                {
                    mas[k] = mas[k + 1];
                }
                n--;
            }
        }
    }
Duha666
51 / 51 / 5
Регистрация: 10.03.2012
Сообщений: 138
29.03.2012, 19:42 #3
Infinity3000, решать тривиальную задачу за O(N^3)? Не дико ли?
Проблема в том, что сдвинув все элементы, вы пропускаете проверку следующего элемента(он занял текущую позицию, рассмотрение которой мы закончили). Решить это можно например вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
using namespace std;
 
int n, a[500], p;
 
int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (int i = 0; i < n; i++)
        if (a[i] % 2 != 0)
            a[p++] = a[i];
    n = p;
    for (int i = 0; i < n; i++)
        printf("%d ", a[i]);
}
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
29.03.2012, 19:43 #4
Цитата Сообщение от Duha666 Посмотреть сообщение
Infinity3000, решать тривиальную задачу за O(N^3)?
Решалось давно, и тогда мне точно не интересовало


Цитата Сообщение от Duha666 Посмотреть сообщение
Не дико ли?
Duha666
51 / 51 / 5
Регистрация: 10.03.2012
Сообщений: 138
29.03.2012, 19:46 #5
Infinity3000, кстати. Ваш код тоже не работает. Попробуйте 2 2 2
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
29.03.2012, 19:55 #6
Цитата Сообщение от Duha666 Посмотреть сообщение
Infinity3000, кстати. Ваш код тоже не работает. Попробуйте 2 2 2
Мне сейчас нет желания проверять! коду 300++ лет! все может быть! я с Вами согласен!


Он не рабочий если в массиве все четные элементы, останеться полюбому один элемент, если есть нечетные то четные "удаляться" без проблем!

И если разобраться то с массива невозможно удалить элемент
Duha666
51 / 51 / 5
Регистрация: 10.03.2012
Сообщений: 138
29.03.2012, 19:57 #7
Цитата Сообщение от Infinity3000 Посмотреть сообщение
если есть нечетные то четные "удаляться" без проблем
Если бы Тогда проверьте:
Код
5
1 2 2 2 2
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
29.03.2012, 20:01 #8
Цитата Сообщение от Duha666 Посмотреть сообщение
Если бы Тогда проверьте:
Код
5
1 2 2 2 2
О Господи!
Миниатюры
Удаление символа из одномерного массива!  
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
29.03.2012, 20:01 #9
Причина может быть в этом:
C++
1
2
3
4
5
6
for(int j=nmax; j<n-1;j++)
                                {
                                        a[j]=a[j+1];
                                        n--;//!!!!!!!!!!!!!!!!!!!!!!!!!
                                       
                                }
Ты зачем-то проходя по массиву, (очевидно с целью сдвинуть элементы ), одновременно уменьшаешь размер массива.Он таким образом уменьшится примерно в 2 раза!!!
Думаю, ты имел в виду это
C++
1
2
3
4
5
for(int j=nmax; j<n-1;j++)
           {
                 a[j]=a[j+1];                                       
           }
n--;
Duha666
51 / 51 / 5
Регистрация: 10.03.2012
Сообщений: 138
29.03.2012, 20:04 #10
Infinity3000, первое число - размерность. На массиве 5 1 2 2 2 2 работает нормально, не спорю. Но на 1 2 2 2 2 - нет.

Kuzia domovenok, это основная ошибка. Но её исправление ничего не решает.
MsHassium
2 / 2 / 0
Регистрация: 04.03.2012
Сообщений: 21
29.03.2012, 20:09  [ТС] #11
Цитата Сообщение от Infinity3000 Посмотреть сообщение
в Вашем коде не хочеться разбираться!

вот рабочий код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            if(mas[j] % 2 == 0)                                                     
            {
                for(int k = j; k < n; k++)
                {
                    mas[k] = mas[k + 1];
                }
                n--;
            }
        }
    }
огромное спасибо!!!! Один вопрос, для чего нам два одинаковых счетчика, j, я еще понял,а i зачем ???

Все понял!) Спасибо!
villu
203 / 203 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
29.03.2012, 21:09 #12
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
#include <stdio.h>
 
int main()
{
 
    int arr[] = { 1, 4, 5, 6, 9, 11, 13, 14, 22, 25, 27 };
    int size = sizeof(arr) / sizeof(arr[0]);
    int new_size = size;
    int s = 0;
    
    printf("old size is: %d\nold array:\n", size);
 
    for(int i=0; i<size; i++) {
        printf(" %d", arr[i]);
    }
 
    for( int i=0; i<size; i++ ) {
        if( 0 == arr[i] % 2  ) {
            new_size--, s++;
            continue;
        }
        arr[i-s] = arr[i];
    }
    printf("\nnew size is: %d\nnew array:\n", new_size);
 
    for(int i=0; i<new_size; i++) {
        printf(" %d", arr[i]);
    }
    return 0;
}
Код
old size is: 11
old array:
 1 4 5 6 9 11 13 14 22 25 27
new size is: 7
new array:
 1 5 9 11 13 25 27

Не по теме:

только у меня так отвратительно код в теге CODE выглядит?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2012, 21:09
Привет! Вот еще темы с ответами:

Удаление из одномерного массива. ошибка в коде! - C++
В одномерном массиве убрать все цепочки отрицательных элементов, расположенные между положительными числами. #include &lt;iostream&gt; ...

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

Удаление символа - C++
как удалить последний символ в файле ???

Удаление символа строки - C++
Здравствуйте а есть такая функция которая удаляет из строки выбранный символ и соответственно сдвигает остальные


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

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

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