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

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

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

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

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

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

Все отрицательные элементы массива перенести в начало, а все остальные - в конец C++
C++ Отсортировать элементы массива: отрицательные – в начало массива, положительные – в конец
одномерный массив. Все его элементы, не равные нулю, переписать, сохраняя их порядок в начало массива, а нулевые элементы в конец массива in c++ C++
Все положительные элементы массива поставить в начало, а отрицательные - в конец C++
Все отрицательные цифры поместить в начало массива, а положительные в конец C++
C++ Перестановить положительные элементы в начало массива, отрицательные — в конец
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохранением порядка следования C++
C++ Для каждого из массивов все отрицательные элементы переместить в начало массива, а все положительные — в конец
В массив X записать сначала все положительные элементы M1 а затем все отрицательные элементы M2 C++
Поставить в начало массива все четные элементы, а конец – все нечетные C++
Скопировать из исходного вектора положительные элементы в один массив, а отрицательные - в другой C++
2. В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохра C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4667 / 2493 / 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--;}
    }
greeezz
23.10.2011, 10:10
  #3

Не по теме:

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

Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.10.2011, 10:18     Необходимо, пройдя по массиву один раз, все его положительные элементы поставить в начало а отрицательные в конец #4
Вот, недавно писал такую же:
http://www.cyberforum.ru/showthread.php?p=2092804
valeriikozlov, а дополнительные условия во внутренних циклах тоже нужны
valeriikozlov
Эксперт C++
4667 / 2493 / 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--;}
        }
Mr.X
Эксперт С++
3040 / 1685 / 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);
}
Yandex
Объявления
23.10.2011, 11:59     Необходимо, пройдя по массиву один раз, все его положительные элементы поставить в начало а отрицательные в конец
Ответ Создать тему
Опции темы

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