Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Ириска5
0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 40
1

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

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

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

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

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

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

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

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

5
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 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
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.10.2011, 10:18 4
Вот, недавно писал такую же:
http://www.cyberforum.ru/showthread.php?p=2092804
valeriikozlov, а дополнительные условия во внутренних циклах тоже нужны
1
valeriikozlov
Эксперт С++
4686 / 2512 / 751
Регистрация: 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
Эксперт С++
3180 / 1707 / 435
Регистрация: 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

Сдвинуть все отрицательные элементы с в начало массива,сохраняя их порядок между собой, а все положительные элементы
Дан целочисленный список с количеством элементов 2n, не содержащий нулей....

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

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


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

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

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