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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Ириска5
0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 40
#1

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

23.10.2011, 09:19. Просмотров 1227. Ответов 5
Метки нет (Все метки)

Помогите решить такую задачу пжл:
дан одномерный массив "а" (состоящий из вещественных чисел). Необходимо пройдя по массиву один раз все его положительные элементы поставить в начало а отрицательные в конец, при этом использовать переменные - i и j, но они будут являются счетчиками, то есть им нельзя присваивать значения констант или элементы массива и в программе нельзя больше использовать никаких переменных кроме i и j
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2011, 09:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необходимо, пройдя по массиву один раз, все его положительные элементы поставить в начало а отрицательные в конец (C++):

Все положительные элементы массива поставить в начало, а отрицательные - в конец - C++
Помогите решить такую задачу пжл: дан одномерный массив "а" (состоящий из вещественных чисел). Необходимо пройдя по массиву один раз все...

Для каждого из массивов все отрицательные элементы переместить в начало массива, а все положительные — в конец - C++
Составить программу, которая превращает массивы А и В следующим образом: для каждого из них все отрицательные элементы одномерного...

Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес - C++
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n)....

Перестановить положительные элементы в начало массива, отрицательные — в конец - C++
Помогите написать задачи: 1. Перестановить положительные элементы в начало массива, отрицательные - в конец. 2. Найти элемент с...

Все отрицательные цифры поместить в начало массива, а положительные в конец - C++
4. Дан массив положительных и отрицательных чисел. Переписать массив так, чтобы все отрицательные цифры были в начале массива, а...

Поставить в начало массива все четные элементы, а конец – все нечетные - C++
Всем доброго времени суток.Помогите написать процедуру, которая ставит в начало массива все четные элементы, а конец – все нечетные.

5
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
23.10.2011, 09:52 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Ириска5 Посмотреть сообщение
и в программе нельзя больше использовать никаких переменных кроме i и j
ничего лучше не придумывается (или думать больше не хочется ):
n - размер массива.
C++
1
2
3
4
5
6
7
8
9
10
    i=0; j=n-1;
    while(i<j)
    {
        while(a[i]>=0.)
            i++;
        while(a[j]<0.)
            j--;
        if(i<j)
        {a[i]+=a[j]; a[j]=a[i]-a[j]; a[i]-=a[j]; i++; j--;}
    }
3
greeezz
23.10.2011, 10:10
  #3

Не по теме:

Цитата Сообщение от valeriikozlov Посмотреть сообщение
ничего лучше не придумывается (или думать больше не хочется ):
красивое решение! нет слов. может только размер n заменить на sizeof(a)/sizeof(float). хотя не это главное в этой задаче.

1
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.10.2011, 10:18 #4
Вот, недавно писал такую же:
http://www.cyberforum.ru/showthread.php?p=2092804
valeriikozlov, а дополнительные условия во внутренних циклах тоже нужны
1
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
23.10.2011, 10:51 #5
Цитата Сообщение от Thinker Посмотреть сообщение
valeriikozlov, а дополнительные условия во внутренних циклах тоже нужны
согласен.
C++
1
2
3
4
5
6
7
8
9
10
        i=0; j=n-1;
        while(i<j)
        {
                while(a[i]>=0. && i<j)
                        i++;
                while(a[j]<0. && j>i)
                        j--;
                if(i<j)
                {a[i]+=a[j]; a[j]=a[i]-a[j]; a[i]-=a[j]; i++; j--;}
        }
2
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
23.10.2011, 11:59 #6
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
61
62
63
/////////////////////////////////////////////////////////////////////////////////////////
//Дан одномерный массив "а" (состоящий из вещественных чисел). 
//Необходимо, пройдя по массиву один раз, все его положительные элементы поставить 
//в начало, а отрицательные в конец, при этом использовать переменные i и j, 
//но они будут являются счетчиками, то есть им нельзя присваивать значения констант 
//или элементы массива, и в программе нельзя больше использовать никаких 
//переменных кроме i и j.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector<int>  T_nums;
/////////////////////////////////////////////////////////////////////////////////////////
void  my_partial_sort(T_nums&  nums)
{    
    int  j = 0;
    for(size_t  i = 0; i < nums.size(); ++i)
    {
        if(nums[i] < 0)
        {
            ++j;    
        }
        else        
        {
            std::swap( nums[i], nums[i - j] );
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_nums(const T_nums&  nums)
{
    std::copy
        (
            nums.begin(),
            nums.end(),
            std::ostream_iterator<T_nums::value_type>(std::cout, " ")
        );
    std::cout << std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    srand(unsigned(time(0)));
    const int  NUMS_DIM = 20;
    T_nums  nums;    
    for(int  i = 0; i < NUMS_DIM; ++i)
    {
        nums.push_back(rand() % 100 - 50);
    }
    std::cout << "Массив до сортировки:"
              << std::endl;
    print_nums(nums);
 
    my_partial_sort(nums);
    std::cout << std::endl
              << "Массив после сортировки:"
              << std::endl;
    print_nums(nums);
}
1
23.10.2011, 11:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2011, 11:59
Привет! Вот еще темы с ответами:

Все отрицательные элементы массива перенести в начало, а все остальные - в конец - C++
помогите пожалуйста))) преобразовать массив по следующему правилу (воспользовавшись массивом у как вспомогательным):все отрицательные...

Отсортировать элементы массива: отрицательные – в начало массива, положительные – в конец - C++
написать две проги...Желательно в Microsoft Visual Studio. Исходный массив инициализировать случайным образом, предусмотрев возможность...

Все положительные элементы поместить в начало массива В(n), а отрицательные элементы — в начало массива С(n) - C++
Ребята. Помогите с задачей пожалуйста. Дан массив А(n). Все положительные его элементы поместить в начало массива В(n), а...

В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохранением порядка следования - C++
Здравствуйте форумчане! Подскажите, как решить данные задания. Отстаю от группы, а так и не разобрался в этой теме. Используя...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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