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

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

Войти
Регистрация
Восстановить пароль
 
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
#1

Нужно отсортировать одномерный масив - C++

15.10.2013, 09:51. Просмотров 414. Ответов 11
Метки нет (Все метки)

Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а затем - все остальные.

Максимальный елемент нашол!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 09:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно отсортировать одномерный масив (C++):

Отсортировать масив - C++
Отсортировать элементы массива по возрастанию только положительные элементы.

Одномерный масив - C++
в одномерном массиве состоящем из n вещественных элементов, вычислить: 1)количество элементов массива, равных 0. 2)сумму элементов...

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

одномерный масив... - C++
Здравствуйте помогите пожалйста...в одномерном массиве сделать так чтоб все четные заменялись на 0, а не четные на 1.....и объясните каждый...

C++, одномерный масив - C++
В одномерном массиве, состоящем из n действительных элементов, найдите: 1) количество элементов массива равных 0 2) сумму элементов...

Отсортировать масив методом пузырьковой сортировки - C++
1). Создать 2 массива по 5 элементов. Заполнить их случайными числами и отсортировать первый в возрастающем порядке, а второй в убывающем. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
15.10.2013, 10:01 #2
tasik, не уверен что хорошее решение, но заводим дополнительную переменную, которая показывает количество перемещенных элементов и сделать нечто вроде:
C++
1
2
3
4
5
6
7
int t = -1;
for (int i=0;i<n;i++)
     if (abs(array[i]) - array[max]) <= abs(array[max]*0.2)
     {
          t++;
          swap(array[t],array[i]);
     }
при таком способе остальные значения располагаются не в исходном порядке
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
15.10.2013, 10:11 #3
По сути, если нет ограничений в виде сохранения упорядоченности, то можно просто отсортировать по убыванию
2
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 10:13  [ТС] #4
Функцию swap самому написать или стандартная?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
15.10.2013, 10:18 #5
Цитата Сообщение от tasik Посмотреть сообщение
отличающиеся от максимального не более чем на 20%
Цитата Сообщение от tasik Посмотреть сообщение
а затем - все остальные
Что первые, что вторые - как должны располагаться между собой?
0
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
15.10.2013, 10:18 #6
Цитата Сообщение от tasik Посмотреть сообщение
чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а затем - все остальные
Вроде же все тривиально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
 
using namespace std;
 
int main() {
  int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
  int max = *max_element(begin(a), end(a));
  stable_partition(begin(a), end(a), [=](int i) { return abs(i - max) <= 0.2*abs(max); });
  for (int i : a)
    cout << i << ", ";
}
95, 80, 90, 100, 50, 15, 13, 35, 75, 40,
1
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 10:51  [ТС] #7
Цитата Сообщение от kamre Посмотреть сообщение
Вроде же все тривиально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iostream>
 
using namespace std;
 
int main() {
  int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
  int max = *max_element(begin(a), end(a));
  stable_partition(begin(a), end(a), [=](int i) { return abs(i - max) <= 0.2*abs(max); });
  for (int i : a)
    cout << i << ", ";
}
использую dev cpp portable , ошибка 9 33 ] 'begin' was not declared in this scope , библиотека стл подключена
0
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
15.10.2013, 10:57 #8
Цитата Сообщение от tasik Посмотреть сообщение
использую dev cpp portable
Важно какой компилятор используется. У меня с mingw gcc 4.8.1 (с ключом '-std=c++11') и msvc 2013 все работает.
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
15.10.2013, 11:03 #9
Цитата Сообщение от tasik Посмотреть сообщение
C++
1
begin(a)
просто
C++
1
a
C++
1
end(a)
C++
1
а+10
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
15.10.2013, 12:11 #10
aLarman, не только.
Там из С++11 еще лямбда-функция и for цикл по коллекции. Вот под 98 стандарт:
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
#include <algorithm>
#include <iostream>
#include <cmath>
 
class NearMax
{
  public:
    NearMax(const int x): max(x) {}
    bool operator()(const int x)
    {
        return abs(x - max) <= 0.2*abs(max);
    }
  private:
    int max;
};
 
int main()
{
    int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
    const int N = sizeof(a) / sizeof(*a);
    int max = *std::max_element(a, a + N);
    std::stable_partition(a, a + N, NearMax(max));
    for (int i=0; i < N; i++)
        std::cout << a[i] << ", ";
}
1
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2013, 12:14 #11
Цитата Сообщение от tasik Посмотреть сообщение
Преобразовать массив таким образом...
Задача на прохождение по массиву ровно 1 раз, никаких сортировок и т.д.
0
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
15.10.2013, 12:47  [ТС] #12
Цитата Сообщение от MrGluck Посмотреть сообщение
aLarman, не только.
Там из С++11 еще лямбда-функция и for цикл по коллекции. Вот под 98 стандарт:
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
#include <algorithm>
#include <iostream>
#include <cmath>
 
class NearMax
{
  public:
    NearMax(const int x): max(x) {}
    bool operator()(const int x)
    {
        return abs(x - max) <= 0.2*abs(max);
    }
  private:
    int max;
};
 
int main()
{
    int a[] = { 50, 95, 15, 13, 35, 75, 80, 90, 100, 40 };
    const int N = sizeof(a) / sizeof(*a);
    int max = *std::max_element(a, a + N);
    std::stable_partition(a, a + N, NearMax(max));
    for (int i=0; i < N; i++)
        std::cout << a[i] << ", ";
}
Работает!

Добавлено через 1 минуту
Спасибо всем кто принимал участие.
Тема закрыта.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2013, 12:47
Привет! Вот еще темы с ответами:

Создать одномерный масив... - C++
Создать одномерный масив у, елементы которого вычесляются по формуле y=f(k), где k=1,2,3,...,10, а f(k)=cos2(квадрат) sin(2k-1)+5,25....

одномерный масив решено но не до конца. - C++
Всем программистам привет ! В общем дан одномерный массив , надо найти: 1)минимальный элемент массива; его то я нашол #include...

Одномерный масив.Добавление элементов в конец.С++ - C++
Вот задания: 1) Сформировать одномерный массив целых чисел. 2) Распечатать полученный массив. 3) Уничтожить 5 первых элементов...

Создать структуру, используя потоки заполнить масив структурами и отсортировать - C++
Помогите, никак не могу закончить програму. Как через поток записать существующие (записаные в файле данные) в масив? #include &lt;...


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

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

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