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

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

Восстановить пароль Регистрация
 
алишка999
1 / 1 / 0
Регистрация: 01.09.2012
Сообщений: 30
01.09.2012, 19:54     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного #1
дан массив X(N). получить новый массив Y(N), такой, что в нем сначала идут положительные числа, затем нулевые, и затем отрицательные из Х. данные: n=7; Х=(-1,2,0,4,-3,-2,0)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2012, 19:54     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного
Посмотрите здесь:

Записать в этот же массив сначала все положительные числа и нули, а затем все отрицательные C++
C++ Напечатать сначала все отрицательные числа этой последовательности, затем все положительные
C++ Расположить элементы одномерного массива в следующем порядке: сначала отрицательные, затем нули, потом положительные
C++ Записать в данный массив сначала все отрицательные числа и нули, затем все положительные, сохраняя порядок их следования
Записать в другой файл сначала отрицательные элементы, а затем положительные C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
01.09.2012, 20:04     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного #2
просто сортируете по убыванию.

Не по теме:

мне кажется, что этот пользователь - ulx05

nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
01.09.2012, 20:25     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного #3
алишка999, такие дела..
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
#include <iostream>
#include <algorithm>
#include <functional>
 
int main()
{
   std::vector <int> input_vector = { -1, 2, 0, 4, -3, -2, 0 };
   std::vector <int> result_vector, negative_vector;
   
   std::partition_copy(
      input_vector.begin(),
      input_vector.end(),
      std::back_inserter(result_vector),
      std::back_inserter(negative_vector),
      std::bind(
         std::greater_equal <int>(),
         std::placeholders::_1,
         0
      )
   );
   
   std::stable_partition(
      result_vector.begin(),
      result_vector.end(),
      std::bind(
         std::not_equal_to <int>(),
         std::placeholders::_1,
         0
      )
   );
   
   std::copy(
      negative_vector.begin(),
      negative_vector.end(),
      std::back_inserter(result_vector)
   );
   
   for (const auto & val : result_vector) {
      std::cout << val << " ";
   }
}
http://liveworkspace.org/code/bc2a02...4c5fdd32f8ddf9
Elboy
131 / 112 / 4
Регистрация: 01.09.2012
Сообщений: 288
01.09.2012, 22:42     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main (){
    int i, j, n = 7;
    int massX[] = {-1,2,0,4,-3,-2,0};
    int massY[n];
    int num;
 
    for (i = 0; i < n; i++)
        massY[i]=massX[i];
 
    for (j = 0; j < n; j++)
        for (i = 1; i < n; i++)
            if (massY[i-1] < massY[i]){
                num = massY[i-1];
                massY[i-1] = massY[i];
                massY[i] = num;
            }
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
02.09.2012, 14:01     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного #5
Elboy, Ваш код близок к пузырьковой сортировке, но по сравнению с ней "слабее". Лучше тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main (){
    int i, j;
    const int n = 7;
    int massX[] = {-1,2,0,4,-3,-2,0};
    int massY[n];
    int num;
 
    for (i = 0; i < n; i++)
        massY[i]=massX[i];
 
    for (j = 0; j < n; j++)
        for (i = 1; i < n-j; i++)
            if (massY[i-1] < massY[i]){
                num = massY[i-1];
                massY[i-1] = massY[i];
                massY[i] = num;
            }
    for (i = 0; i < n; i++)
        printf("%d ", massY[i]);
}
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
02.09.2012, 19:17     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
   setlocale(LC_ALL, "rus");
   cout << "Введите количество элементов массива" << endl;
   int n;
   cin >> n;
   vector <int> a(n);
   for (int i = 0; i < n; i++)
      cin >> a[i];
   sort(a.rbegin(), a.rend());
   for (int i = 0; i < n; i++) 
      cout << a[i];
   cin.get();
   return 0;
}
Yandex
Объявления
02.09.2012, 19:17     Получить новый массив, в котором сначала идут положительные числа, затем нулевые, затем отрицательные исходного
Ответ Создать тему
Опции темы

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