• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Алгоритм перестановки элементов

  • Автор темы Автор темы vitjok
  • Дата начала Дата начала

vitjok

Новые
Регистрация
29 Сен 2012
Сообщения
72
Реакции
0
Баллы
0
Алгоритм перестановки элементов

Здравствуйте. Кто нибудь подскажите алгоритм перестановки элементов таким образом:
дан вектор
исходный:
7894136
выходной:
6578941

перестановка производиться таким образом, что элемент в четной ячейке переходит в следующую четную,последняя четная в первую четную, а первая нечетная в сл нечетную, а последняя нечетная в первую.
IMG_20140326_223824.webp
 
Ну, вкратце так:
У нас, как я понимаю, вектор фиксированной длины. Начнем с нечетных ячеек.
Последнее значение запоминаем во временную переменную, потом предпоследнее нечетное двигаем на последнее место и т.д. Т.е. сдвиг делаем из конца в начало. Финальным этапом записываем число из переменной в первое нечетное.
Таким же макаром гоняем и четные :)
Еще один вариант - гонять попарно:
Значения двух последних ячеек сохраняем в две переменные, делаем сдвиг, как и в предыдущем случае, только каждое число сдвигаем на +2, и потом значения из переменных записываем в первые две ячейки. :)
Второй вариант прокатит с вектором любой длины; единственное, сначала надо будет определить, последняя ячейка четная или нет. Если да, то просто сдвигаем все, как я указал выше. Если нет - сдвигаем все числа, а переменные при записи меняем местами.
Например, последняя ячейка вектора у нас четная. Значение предпоследней ячейки пишем в А, последней - в В. После сдвига содержимое А идет в 1-ю ячейку, содержимое В - во 2-ю.
Если последняя ячейка нечетная, то содержимое А идет во 2-ю ячейку, содержимое В - в 1-ю.
 
код составил перестановка работает не совсем как должна, переставляем справа налево, а должна слева на право.
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
//#include <time.h>

int main()
{
	int i, n,m, v_min, v_max,temp;

	time_t t;		// текущее время для инициализации
				// генератора случайных чисел

	srand((unsigned) time(&t));	// инициализация генератора
							// случайных чисел


	printf("\nZadanie 1");

	printf("\nEnter the range of random numbers:\n");
	printf("\nv_min=");
	scanf("%d", &v_min);
	printf("\nv_max=");
	scanf("%d", &v_max);
	printf("\nLength vektora:");
	scanf("%d", &n);

	int vector[n];

	printf("\nOriginal vector:\n");

	m = v_max-v_min + 1;

	for (i=0; i<n; i++)
		{
				// получение случайного числа в диапазоне
				// от vector_min  до  vector_max
			vector[i]=rand()% m + v_min;
			printf(" %5d", vector[i]);
		}

	printf("\n");



for (i = 1; i < n-1; i++)
            {
                if (i % 2 == 0)
                {
                    temp=vector[i+1];
                  vector[i+1]=vector[i-1];
                  vector[i-1]=temp;

                  }
            }
for (i = 0; i < n-1; i++)
            {
                if (i % 2 != 0)
                {
                    temp=vector[i+1];
                  vector[i+1]=vector[i-1];
                  vector[i-1]=temp;

                  }
            }

			printf("\nObtained vector:\n");
			for (i=0; i<n; i++)
				{
					printf(" %5d", vector[i]);
				}

	printf("\n");
	return 0;
}
кто может помочь исправить?
 
Назад
Сверху