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

Преобразование массива. Нечетные индексы слева, четные индексы справа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
12.09.2012, 19:15     Преобразование массива. Нечетные индексы слева, четные индексы справа #1
Добрый вечер. Задание таково: дан некоторый массив произвольной длины, требуется преобразовать его так, чтобы элементы с четными индексами были справа, а с нечетными индексами были слева. Можно ли данную задачу решить без использования доп массива?
Пример:
{0 1 2} -> {1 0 2} или {1 2 0}
{0 1 2 3 4} -> {1 3 0 2 4}
{0 1 2 3 4 5 6 7 8} -> {1 3 5 7 0 2 4 6 8}
Порядок следования элементов в получившемя массиве не важен, важно, чтобы слева были нечетные индексы, а справа четные. Теоретически все не так сложно: обменять элементы с четными индексами первой половины с нечетными второй половины
Но на практике довольно сложно придумать, где середина у массива с нечетным числом элементов, что делать когда середина четна или когда нечетна и т.д.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2012, 19:15     Преобразование массива. Нечетные индексы слева, четные индексы справа
Посмотрите здесь:

C++ Найти сумму всех элементов массива, имеющих четные индексы
C++ Вычислить сумму элементов массива, которые являются степенями пятерки и индексы которых есть нечетные числа.
Вычислить сумму отрицательных элементов массива, которые делятся на 5 и индексы которых есть нечетные числа C++
C++ С++ Вычислить сумму элементов массива, которые делятся на 3 и индексы которых есть нечетные числа
Вычислить сумму элементов массива, которые являются степенями пятерки и индексы которых есть нечетные числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.09.2012, 19:35     Преобразование массива. Нечетные индексы слева, четные индексы справа #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <vector>
#include <algorithm>
#include <iostream>
 
int main()
{
   std::vector<int> vec = {0, 1, 2};
   size_t idx = 1;
   std::stable_partition(vec.begin(), vec.end(), [&idx](int) { return (idx++ % 2) == 0; });
   for (int i : vec) { std::cout << i << " "; }
   std::cout << std::endl;
}
http://liveworkspace.org/code/5449e4...ded27d91420bc5

Только вот есть беда - никто не гарантирует, что обходится вектор будет четко в том порядке в каком есть
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.09.2012, 19:43     Преобразование массива. Нечетные индексы слева, четные индексы справа #3
вариант:
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
#include <iostream>
using namespace std;
 
int main()
{
    int a[100], i, j, tmp, N;
    cout<<"N=";
    cin>>N;
    for(i=0; i<N; i++)
    {
        a[i]=i;
        cout<<a[i]<<" ";
    }
    for(i=1; i<N/2+1; i+=2)
    {
        tmp=a[i-1]; a[i-1]=a[i]; a[i]=tmp;
    }
    for(j=1; i<N; i+=2, j+=2)
    {
        tmp=a[j]; a[j]=a[i]; a[i]=tmp;
    }
    cout<<endl;
    for(i=0; i<N; i++)
    {       
        cout<<a[i]<<" ";
    }
    return 0;
}
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
12.09.2012, 19:53  [ТС]     Преобразование массива. Нечетные индексы слева, четные индексы справа #4
ForEveR, к сожалению, использовать STL и алгоритмы запрещено

Добавлено через 5 минут
valeriikozlov, большое спасибо. Работает как надо!
Yandex
Объявления
12.09.2012, 19:53     Преобразование массива. Нечетные индексы слева, четные индексы справа
Ответ Создать тему
Опции темы

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