Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2019, 01:51   #1
Parovoz
Новичок
Джуниор
 
Регистрация: 01.05.2019
Сообщений: 1
По умолчанию Преобразовать массив согласно последовательности

Дан массив b0, b1,…, b2n-1. Преобразовать этот массив так, чтобы значения элементов были равны b0, bn, b1, bn+1,… , bn-1, b2n-1.

Например для n=5 и для исходного массива {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} должно выводить 0 5 1 6 2 7 3 8 4 9

Последовательность числовая, однако считать что последовательность может быть любых элементов (например, чтобы можно было изменить тип элемента на любой другой). Создавать новый массив нельзя, нужно переставлять элементы в существующем.

Есть вариант написания, но он выдает неверный результат (хотелось бы узнать в чем ошибка):

Код:
#include "pch.h"
#include <iostream>
 
using namespace std;
const int RAZ = 10;     //предельный размер массива
typedef int telem;      //определение типа элементов массива
typedef telem tmas[RAZ];    //определение типа массива
 
void inputmas(tmas, int);
void outputmas(const tmas, int);
void obrabotka_mas(tmas, int);
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    tmas a;
    int n;
    cout << "\n Введете половину размера массива <= " << RAZ / 2 << " : ";
    cin >> n;
    //Контроль ввода размера массива
    if (2 * n > RAZ || n <= 0)
    {
        cout << " Введено недопустимое значение размера массива" << endl;
        return 1;
    }
 
    inputmas(a, n);
    cout << " Исходный массив:" << endl;
    outputmas(a, n);
    obrabotka_mas(a, n);
    cout << endl;
    outputmas(a, n);
}
 
void inputmas(tmas a, int n)
{
    cout << " Введите в одной строке элементы массива, состоящего из " << n * 2;
    cout << "\n чисел, и нажмите <Enter>" << endl;
    for (int i = 0; i < n * 2; i++)
        cin >> a[i];
}
 
void outputmas(const tmas a, int n)
{
    for (int i = 0; i < n * 2; i++)
    {
        cout.width(4);
        cout << a[i] << " ";
    }
}
 
void obrabotka_mas(tmas a, int n) {
    bool f = true;
    telem t = a[0];
    int c = 0;
    for (int i = 0; i < n * 2; i++) {
        if (f) {
            a[i] = t;
            f = false;
        }
        else {
            t = a[i - c];
            a[i] = a[c + n];
            c++;
            f = true;
        }
    }
}
Parovoz вне форума Ответить с цитированием
Старый 02.05.2019, 23:01   #2
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию

Можно сделать так, с помощью вспомогательной очереди
Код:
	queue<int> c;//очередь для записи текущей цифры из первой половины массива
	for (int i = 1, j = n; i < n * 2; i++, j++) // проходимся по массиву, i - текущая ячейка, j - ячейка со второй половины массива, увеличиваем раз в 2 итерации
	{
		c.push(a[i]);//пихаем в очередь текущее число
		if (i % 2 != 0) // через одну ячейку
		{
			a[i] = a[j];// вставляем вместо текущего число из второй половины
		}
		else // иначе
		{
			a[i] = c.front(); // вставляем элемент, который отложили
			c.pop(); // удаляем его из очереди
			j--; // j увеличиваем раз в 2 итерации
		}
	}
Если и так нельзя, нужно подумать как возможно переставлять числа внутри массива. На листике смоделируйте этот процесс и дело пойдет легче.

Последний раз редактировалось alexboliam; 02.05.2019 в 23:04.
alexboliam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан целочисленный массив размера N. Преобразовать массив - C# fr0st1k123 C# (си шарп) 2 17.09.2016 21:39
Преобразовать линейный массив в иерархический массив (с вложенными подмассивами) Serge_Bliznykov PHP 3 17.02.2016 18:57
Как преобразовать массив строк в массив чисел на C#? orfos Помощь студентам 4 03.10.2014 15:56
assembler. Задан массив А из N чисел. Преобразовать этот массив так, чтобы сначала шли четные числа, а потом – нечетные Transcend Помощь студентам 5 18.03.2013 11:42