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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Ириска5
0 / 0 / 0
Регистрация: 08.05.2011
Сообщений: 40
23.10.2011, 09:19     Необходимо, пройдя по массиву один раз, все его положительные элементы поставить в начало а отрицательные в конец #1
Помогите решить такую задачу пжл:
дан одномерный массив "а" (состоящий из вещественных чисел). Необходимо пройдя по массиву один раз все его положительные элементы поставить в начало а отрицательные в конец, при этом использовать переменные - 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++
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.10.2011, 10:18     Необходимо, пройдя по массиву один раз, все его положительные элементы поставить в начало а отрицательные в конец #4
Вот, недавно писал такую же:
http://www.cyberforum.ru/showthread.php?p=2092804
valeriikozlov, а дополнительные условия во внутренних циклах тоже нужны
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
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     Необходимо, пройдя по массиву один раз, все его положительные элементы поставить в начало а отрицательные в конец
Ответ Создать тему
Опции темы

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