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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
VlaDdislav
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 77
#1

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

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

Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию.
на языке С++, через цикл for, самым легким способом, я только начинаю учить язык
пожалуйста..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 02:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию (C++):

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

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

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

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

Удалить элементы в массиве так, чтобы оставшиеся образовывали возрастающую последовательность - C++
Удалить в заданном массиве действительных чисел «лишние» (кроме первого) элементы так, чтобы оставшиеся образовывали возрастающую...

Сортировка массива вставкой, чтобы четные числа шли по возрастанию, а нечетные по убыванию - C++
Всем привет! Есть задача отсортировать массив таким образом, чтобы четные числа шли в нем по возрастанию, а нечетные по убыванию. Числа...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
12.01.2013, 02:54 #16
Все просто, как уже был дан пример:
Допустим задан следующий массив
1 2 5 6 3 4 4 5 9
по условию задачи в массиве должно остаться
1 2 5 6 0 0 0 0 9

Каждый элемент массива должен быть больше предыдущего, если действие выполняется - идем дальше, а если нет - записываем в эту ячейку 0... Что мудрить то... Если условие правильное конечно

И вариант реализации данного "алгоритма" есть выше.
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
12.01.2013, 02:59 #17
Можно, найти два рядом стоящих подмассива, в которых элементы возрастают, сравнить их размерности и обнулить в наименьшем все элементы, которые больше или меньше первого или последнего элемента наибольшего массива, зависит от позиции слева или справа наибольший. Нули игнорировать в подмассивах. Делать пока размерность подмассива не станет равна массиву, За цикл for забудь, это ужас просто будет...лучше while.

такая программа будет работать корректно, извини, но код довольно большой будет писать не буду, если нужно будет в личку напиши, завтра тогда напишу...
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
12.01.2013, 03:01 #18
а почему именно
которые больше или меньше первого или последнего элемента наибольшего массива,
может надо обнулить этот самый наименьший + все которые меньше предпоследнего, и тогда выйдет оптимальнее


0 1 2 3 8 1 2 3 4 5 9 10
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
12.01.2013, 03:03 #19
Ну, размерность подмассива должна стать равна размерности массива, исключая нулевые элементы естественно)

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а почему именно может надо обнулить этот самый наименьший + все которые меньше предпоследнего, и тогда выйдет оптимальнее


0 1 2 3 8 1 2 3 4 5 9 10
Тогда будет ситуация, когда программа удалит подходящие элементы
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
12.01.2013, 03:09 #20
пример 0 1 2 3 8 2 3 4 5 9 10

твоя программа выделит 2 подмассива
0 2 3 8
2 3 4 5 9 10
Рассмотрит, из какого лучше удалить лишние элементы
если из первого, то результат 0 2 2 3 4 5 9 10
если из второго, то результат 0 2 3 8 9 10
и твоя программа выдаст тот, что длиннее 0 2 3 4 5 9 10
верный же вариант 0 1 2 2 3 4 5 9 10
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
12.01.2013, 03:15 #21
Пока выполняется mas[i]<mas[i+1] все нормально, как только перестает выполняться начинаем сравнивать последующие элементы с тем mas[i] до конца массива или до того момента пока снова не будет выполняться mas[i]<mas[i+n]
Оно?
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
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
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
12.01.2013, 03:55 #24
Здесь согласен, неверно)

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

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

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

Добавлено через 4 минуты
Лучше нарисовать эти два массива в виде кривых и посмотреть все возможные варианты....так точно можно будет узнать, все ли случаи проходят проверку...
xADMIRALx
67 / 61 / 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
Сообщений: 132
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
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
12.01.2013, 04:38 #27
Серьёзно ?
Миниатюры
Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию   Из массива удалить минимальное число элементов так, чтобы оставшиеся шли по возрастанию  
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
12.01.2013, 04:42 #28
советую вам посмотреть тему с самого начала)

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

---
10ка сути не меняет, работает не совсем так как надо
xADMIRALx
67 / 61 / 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
Сообщений: 132
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

Но тут уж скорее дело в не точно поставленном условие. Автор и сам точно не знает, что ему нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 05:03
Привет! Вот еще темы с ответами:

Удалить из массива число, у которого наибольшая сумма цифр и отсортировать оставшиеся элементы - C++
Задан массив целых чисел х. Удалить из него число,у которого наибольшая сумма цифр. Поменять местами 2 наибольших элемента в массиве....

Переставить цифры числа так, чтобы получилось минимальное возможное число - C++
Дано натуральное число n. Необходимо переставить его цифры таким образом, чтобы получилось минимальное возможное число без ведущих нулей.

В каждом столбце обнулите минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную - C++
Помогите решить при помощи функций.плиссзО_о Пусть дана матрица А(n x m), состоящая из натуральных чисел. В каждом столбце обнулите...

Переставить строки в массиве так, чтоб они шли по возрастанию их сумм - C++
Помогите написать программу Переставить строки в массиве так, чтоб они шли по возрастанию их сумм.


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

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

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