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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
VlaDdislav
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 77
12.01.2013, 02:05     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #1
Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию.
на языке С++, через цикл for, самым легким способом, я только начинаю учить язык
пожалуйста..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 02:05     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию
Посмотрите здесь:

C++ Удалить из массива минимальное количество элементов, чтобы массив стал упорядочен по возрастанию
В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную C++
Требуется вычеркнуть минимально возможное количество чисел так, чтобы оставшиеся числа шли в порядке возрастания C++
C++ Удалить из массива число, у которого наибольшая сумма цифр и отсортировать оставшиеся элементы
C++ Переписать файл так, чтобы сначала шли положительные, потом отрицательные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
12.01.2013, 03:15     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #21
Пока выполняется mas[i]<mas[i+1] все нормально, как только перестает выполняться начинаем сравнивать последующие элементы с тем mas[i] до конца массива или до того момента пока снова не будет выполняться mas[i]<mas[i+n]
Оно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
contedevel
 Аватар для contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 590
12.01.2013, 03:34     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #22
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 удалит... И что неправильно?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
12.01.2013, 03:36     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #23
Цитата Сообщение от 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


Так что, не всё так просто.
contedevel
 Аватар для contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 590
12.01.2013, 03:55     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #24
Здесь согласен, неверно)

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

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

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

Добавлено через 4 минуты
Лучше нарисовать эти два массива в виде кривых и посмотреть все возможные варианты....так точно можно будет узнать, все ли случаи проходят проверку...
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 04:21     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #25
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;
}
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
12.01.2013, 04:34     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #26
in: 0 1 2 3 8 2 3 4 5 9 10
stdout:
0 1 2 3 8 0 0 0 0 9

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

точнее не совсем корректно
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 04:38     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #27
Серьёзно ?
Миниатюры
Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию   Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию  
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
12.01.2013, 04:42     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #28
советую вам посмотреть тему с самого начала)

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

---
10ка сути не меняет, работает не совсем так как надо
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 04:50     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #29
Пока можно сделать так
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;
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
12.01.2013, 05:03     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #30
Конечно без обид, но яйца в профиль
Цитата Сообщение от 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

Но тут уж скорее дело в не точно поставленном условие. Автор и сам точно не знает, что ему нужно
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 05:06     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #31
Fareiro,

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

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

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

Я вас убедил?)
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 05:36     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #35
Fareiro, Я уже писал,выполнил так как было написано в задание . Придет тс будим,уточнять.

Не по теме:

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



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

Не по теме:

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



Добавлено через 11 минут
Всё у меня верно,если идёт 2 4 3 5 6, то верно будит 2 4 5 6,а не 2 3 4 5 6.Это не сортировка.
А где вы увидели у меня сортировку? Или это вы так?))
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
12.01.2013, 05:52     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #37
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Не по теме:
нужно удалить минимальное число элементов звучит как то,не корректно.
Считайте, что нужно найти максимальное (по числу элементов) упорядоченное подмножество данного массива с сохранением исходного порядка следования.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.01.2013, 06:08     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #38
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; 
}
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
12.01.2013, 08:25     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #39
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 08:34     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
FlaYnoSt
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 18
12.01.2013, 08:34     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию #40
Цитата Сообщение от 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

Не по теме:

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

Yandex
Объявления
12.01.2013, 08:34     Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию
Ответ Создать тему
Опции темы

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