Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/56: Рейтинг темы: голосов - 56, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 77

Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию

12.01.2013, 02:05. Показов 11865. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию.
на языке С++, через цикл for, самым легким способом, я только начинаю учить язык
пожалуйста..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2013, 02:05
Ответы с готовыми решениями:

Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию
Объясните пожалуйста как можно подробнее,как работает эта программа?(желательно все циклы и строки) #include <iostream> ...

Дана последовательность чисел. Требуется вычеркнуть из нее минимальное количество чисел так, чтобы оставшиеся шли в порядке возрастания.
Даны N целых чисел X1, X2, ..., XN. Требуется вычеркнуть из них минимальное количество чисел так, чтобы оставшиеся шли в порядке...

Вычеркнуть минимальное количество чисел, чтобы оставшиеся шли в порядке возрастания (дин. программирование)
Написать программу, которая использует метод динамического программирования. Даны N целых чисел X1,X2, . . . ,XN (1 <= N <= 10000,...

40
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
12.01.2013, 03:15
Студворк — интернет-сервис помощи студентам
Пока выполняется mas[i]<mas[i+1] все нормально, как только перестает выполняться начинаем сравнивать последующие элементы с тем mas[i] до конца массива или до того момента пока снова не будет выполняться mas[i]<mas[i+n]
Оно?
0
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
12.01.2013, 03:34
0 1 2 3 8 2 3 4 5 9 10
выделит 0 1 2 3 8 и 2 3 4 5 9 10
Первый короче, удалит элементы 2 3 и 8 или 3 и 8 как условие поставить
Ответ будет: 0 1 2 3 4 5 9 10

Добавлено через 1 минуту
8 2 3 удалит... И что неправильно?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
12.01.2013, 03:36
Цитата Сообщение от contedevel Посмотреть сообщение
Можно, найти два рядом стоящих подмассива, в которых элементы возрастают, сравнить их размерности и обнулить в наименьшем все элементы, которые больше или меньше первого или последнего элемента наибольшего массива, зависит от позиции слева или справа наибольший. Нули игнорировать в подмассивах. Делать пока размерность подмассива не станет равна массиву, За цикл for забудь, это ужас просто будет...лучше while.
такая программа будет работать корректно, извини, но код довольно большой будет писать не буду, если нужно будет в личку напиши, завтра тогда напишу...
Цитата Сообщение от contedevel Посмотреть сообщение
И что неправильно?
в пердыдущем посте немного неудачный контрпример подобрал, который не опровергал твоё предложение... Вот этот лучше:

пример 3 6 7 9 4 8 11 12

твоя программа выделит 2 подмассива
3 6 7 9
4 8 11 12
Рассмотрит, из какого лучше удалить лишние элементы
если из первого, то результат 3 4 8 11 12
если из второго, то результат 3 6 7 9 12
и твоя программа выдаст тот, что длиннее(или любой, в случае, когда одинаковы) 3 4 8 11 12
верный же вариант 3 6 7 9 11 12


Так что, не всё так просто.
0
 Аватар для contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
12.01.2013, 03:55
Здесь согласен, неверно)

Добавлено через 4 минуты
Ну, тогда, еще в условие выборку на границах массивов организовать, и затем уже выбрать наибольший вариант

Добавлено через 3 минуты
Я в смысле убывающий промежуток находить, перекрывающий два найденных возрастающих, а затем смотреть что следует удалять...

Добавлено через 2 минуты
Это частный случай, он один, ну, возможно, еще сможет быть один-два, это нужно проверить точно, но так или иначе это будет уже на соседних границах массивов, и легко добавить в условие выборки

Добавлено через 4 минуты
Лучше нарисовать эти два массива в виде кривых и посмотреть все возможные варианты....так точно можно будет узнать, все ли случаи проходят проверку...
0
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 04:21
DONE!
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
int main() {
    int mas[11];
    int i,j;
 
 
    for (i = 0;i < 10;++i) {
        cin >> mas[i];
    }
 
    for (i = 0;i < 10;++i) {
        if (mas[i] >= mas[i+1]) {
            mas[i+1] = 0;
            for (j = i + 1;j < 10;++j) {
                if (mas[i] >= mas[j])
                    mas[j] = 0;
            }
 
        }
 
    }
 
    for (i = 0; i < 10;++i) {
        cout << mas[i];
    }
 
return 0;
}
0
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
12.01.2013, 04:34
in: 0 1 2 3 8 2 3 4 5 9 10
stdout:
0 1 2 3 8 0 0 0 0 9

Вывод: не работает

точнее не совсем корректно
0
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 04:38
Серьёзно ?
Миниатюры
Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию   Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию  
0
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
12.01.2013, 04:42
советую вам посмотреть тему с самого начала)

и ваш скрин совсем не нужен, тоже самое есть в моем сообщение, + как мне кажется в конце не хватает 10ки

---
10ка сути не меняет, работает не совсем так как надо
0
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 04:50
Пока можно сделать так
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
    int mas[11];
    int i,j;
 
 
    for (i = 0;i < 10;++i) {
        cin >> mas[i];
    }
 
    for (i = 0;i < 10;++i) {
        if (mas[i] >= mas[i+1]) {
            mas[i+1] = 0;
            for (j = i + 1;j < 10;++j) {
                if (mas[i] >= mas[j])
                    mas[j] = 0;
            }
 
        }
 
    }
    int mas_t[sizeof(mas) / sizeof(mas[0])];
    
 
    for (i = 0; i < 10;++i) {
        if (mas[i] != 0)
        {
            mas_t[i] = mas[i];
        cout << mas_t[i];
        }
    }
return 0;
0
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
12.01.2013, 05:03
Конечно без обид, но яйца в профиль
Цитата Сообщение от contedevel Посмотреть сообщение
0 1 2 3 8 2 3 4 5 9 10
выделит 0 1 2 3 8 и 2 3 4 5 9 10
Первый короче, удалит элементы 2 3 и 8 или 3 и 8 как условие поставить
Ответ будет: 0 1 2 3 4 5 9 10

in: 0 1 2 3 8 2 3 4 5 9 10
stdout: 1 2 3 8 9

Еще и 0 куда-то делся)
http://liveworkspace.org/code/2FNbzz$2

Но тут уж скорее дело в не точно поставленном условие. Автор и сам точно не знает, что ему нужно
0
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 05:06
Fareiro,

VlaDdislav
Допустим задан следующий массив
1 2 5 6 3 4 4 5 9
по условию задачи в массиве должно остаться
1 2 5 6 9

Добавлено через 44 секунды
удаленные заменить "0"
0
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
12.01.2013, 05:09
Допустим задан следующий массив
1 2 5 6 3 4 4 5 9
по условию задачи в массиве должно остаться
1 2 5 6 9
Но нельзя и исключать последовательность: 1 2 3 4 5 9
согласны?
0
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 05:12
Fareiro, Согласен,но в данном случаи,по заданию результат такой,каким он должен быть по заданию.
0
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
12.01.2013, 05:16
Нет, не верно. По заданию, нужно удалить минимальное число элементов...

В массиве 1 2 5 6 3 4 4 5 9
Есть 2 подмассива:
1 2 3 4 5 9
1 2 5 6 9
Для первого нужно удалить: 3 элемента
Для второго: 4
Следовательно первый вариант правильный, а ваш выдает второй, что уже не соответствует условию)

Я вас убедил?)
0
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 05:36
Fareiro, Я уже писал,выполнил так как было написано в задание . Придет тс будим,уточнять.

Не по теме:

нужно удалить минимальное число элементов звучит как то,не корректно.



Добавлено через 11 минут
Всё у меня верно,если идёт 2 4 3 5 6, то верно будит 2 4 5 6,а не 2 3 4 5 6.Это не сортировка.
0
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
12.01.2013, 05:44
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Fareiro, Я уже писал,выполнил так как было написано в задание . Придет тс будим,уточнять.

Не по теме:

нужно удалить минимальное число элементов звучит как то,не корректно.



Добавлено через 11 минут
Всё у меня верно,если идёт 2 4 3 5 6, то верно будит 2 4 5 6,а не 2 3 4 5 6.Это не сортировка.
А где вы увидели у меня сортировку? Или это вы так?))
0
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
12.01.2013, 05:52
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Не по теме:
нужно удалить минимальное число элементов звучит как то,не корректно.
Считайте, что нужно найти максимальное (по числу элементов) упорядоченное подмножество данного массива с сохранением исходного порядка следования.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
12.01.2013, 06:08
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
#include <iostream>
using namespace std;
int main()
{
      int a[100][2], max, i, j, N;
      cout<<"N= ";
      cin>>N;
      max=N-1;
      for(i=0; i<N; i++)
      {
          cout<<"["<<i+1<<"]= ";
          cin>>a[i][0];
          a[i][1]=0;
      }
      a[N-1][1]=1;
      for(i=N-2; i>=0; i--)
      {
          a[i][1]=1;
          for(j=i+1; j<N; j++)
              if(a[j][0]>a[i][0] && a[i][1]<a[j][1]+1)
                  a[i][1]=a[j][1]+1;
          if(a[max][1]<a[i][1])
              max=i;
      }
      while(a[max][1]>1)
      {
          cout<<a[max][0]<<" ";
          for(i=max+1; i<N; i++)
              if(a[max][0]<a[i][0] && a[max][1]==a[i][1]+1)
              {
                  max=i;
                  break;
              }
      }
      cout<<a[max][0]<<endl;
      return 0; 
}
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
12.01.2013, 08:25
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
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
 
using namespace std;
 
int main(void)
{
    const unsigned array_size = 10;
    unsigned MyArray[array_size];
    cout<<"Enter array...\n";
    for(unsigned i=0; i<array_size; i++){
        cout<<" value "<<i+1<<"/"<<array_size<<" : ";
        cin>>MyArray[i];
    };
 
    // посмотрим
    cout<<"\n Array before : ";
    for(unsigned i=0; i<array_size-1; i++) cout<<MyArray[i]<<", ";
    cout<<MyArray[array_size-1]<<".\n";
 
    int Badness, BadnessMax;
    int IndexOfBadElement = 0;  // будем считать, что первый элемент не подходит
 
    while(IndexOfBadElement >= 0){
 
        // вычислим "негодность" каждого элемента и индекс главного "негодяя"
        IndexOfBadElement = -1;
        BadnessMax = 0;
 
        // чем больше количество элементов до него, которые больше него и после него, которые меньше, тем хуже
        for(unsigned i=0; i<array_size; i++){
            Badness = 0;
            if(MyArray[i] != 0){
                for(unsigned i1=0; i1<array_size; i1++)
                    if(MyArray[i1] != 0 && ((i1 < i && MyArray[i1] > MyArray[i]) || (i1 > i && MyArray[i1] < MyArray[i])))
                        Badness++;
            }
            if(Badness > BadnessMax){
                BadnessMax = Badness;
                IndexOfBadElement = i;
            }
        }
 
        if(IndexOfBadElement >= 0){
            // обнуляем самый непотребный елемент
            MyArray[IndexOfBadElement] = 0;
        }
    }
 
    // посмотрим после обработки
    cout<<"\n Array after  : ";
    for(unsigned i=0; i<array_size-1; i++) cout<<MyArray[i]<<", ";
    cout<<MyArray[array_size-1]<<".\n";
 
    system("pause");
    return 0;
}
Добавлено через 58 секунд
вот, надеюсь прокомментировал понятно, вроде работает

Добавлено через 15 минут
вот то же самое, только размер массива можно любой задать и одинаковые элементы убираются
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
using namespace std;
int main(void)
{
    unsigned array_size;
    cout<<"Enter array size :";
    cin>>array_size;
    if(array_size <= 0) return 0;
 
    unsigned *MyArray = new unsigned int[array_size];
 
    cout<<"Enter array values...\n";
    for(unsigned i=0; i<array_size; i++){
        cout<<" value "<<i+1<<"/"<<array_size<<" : ";
        cin>>MyArray[i];
    };
 
    // посмотрим
    cout<<"\n Array before : ";
    for(unsigned i=0; i<array_size-1; i++) cout<<MyArray[i]<<", ";
    cout<<MyArray[array_size-1]<<".\n";
 
    int Badness, BadnessMax;
    int IndexOfBadElement = 0;  // будем считать, что первый элемент не подходит
 
    while(IndexOfBadElement >= 0){
 
        // вычислим "негодность" каждого элемента и индекс главного "негодяя"
        IndexOfBadElement = -1;
        BadnessMax = 0;
 
        // чем больше количество элементов до него, которые больше или равны него и после него, которые меньше или равны, тем хуже
        for(unsigned i=0; i<array_size; i++){
            Badness = 0;
            if(MyArray[i] != 0){
                for(unsigned i1=0; i1<array_size; i1++)
                    if(MyArray[i1] != 0 && ((i1 < i && MyArray[i1] >= MyArray[i]) || (i1 > i && MyArray[i1] <= MyArray[i])))
                        Badness++;
            }
            if(Badness > BadnessMax){
                BadnessMax = Badness;
                IndexOfBadElement = i;
            }
        }
 
        if(IndexOfBadElement >= 0){
            // обнуляем самый непотребный елемент
            MyArray[IndexOfBadElement] = 0;
        }
    }
 
    // посмотрим после обработки
    cout<<"\n Array after  : ";
    for(unsigned i=0; i<array_size-1; i++) cout<<MyArray[i]<<", ";
    cout<<MyArray[array_size-1]<<".\n";
 
    system("pause");
    delete[] MyArray;
    return 0;
}
0
1 / 1 / 1
Регистрация: 10.01.2013
Сообщений: 18
12.01.2013, 08:34
Цитата Сообщение от VlaDdislav Посмотреть сообщение
Допустим задан следующий массив
1 2 5 6 3 4 4 5 9
по условию задачи в массиве должно остаться
1 2 5 6 9

Добавлено через 44 секунды
удаленные заменить "0"

так ты удаляешь 4 числа, удалив 5 6 и 4 получишь: 1 2 3 4 5 9

Не по теме:

мимо проходил

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2013, 08:34

Удалить из массива минимальное количество элементов, чтобы массив стал упорядочен по возрастанию
Всем добрый день Задача Дан массив чисел, необходимо удалить из данного массива минимальное количество элементов, чтобы массив стал...

Вычеркнуть минимально возможное количество чисел так, чтобы оставшиеся шли в порядке возрастания
Дана последовательность из целых чисел, среди которых нет двух одинаковых. Требуется вычеркнуть минимально возможное количество чисел...

Описать процедуру RemoveForInc(A, N), удаляющую из массива «лишние» элементы так, чтобы оставшиеся оказались упорядочены по возрастанию
Описать процедуру RemoveForInc(A, N), удаляющую из веществен- ного массива A размера N «лишние» элементы так, чтобы оставшиеся элементы...

Требуется вычеркнуть минимально возможное количество чисел так, чтобы оставшиеся числа шли в порядке возрастания
27. Дана последовательность из N целых чисел, среди которых нет двух одинаковых. Требуется вычеркнуть минимально возможное количество чисел...

удалить из числа 3 цифры так, чтобы оставшиеся цифры составили наименьшее число.
Наименьшее число Пусть задано некоторое натуральное число N. (число цифр в этом числе больше 3 и меньше 30). Необходимо удалить из этого...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru