Алгоритм перестановки элементов
Вложений: 1
Здравствуйте. Кто нибудь подскажите алгоритм перестановки элементов таким образом:
дан вектор исходный: 7894136 выходной: 6578941 перестановка производиться таким образом, что элемент в четной ячейке переходит в следующую четную,последняя четная в первую четную, а первая нечетная в сл нечетную, а последняя нечетная в первую. Вложение 180909 |
Ну, вкратце так:
У нас, как я понимаю, вектор фиксированной длины. Начнем с нечетных ячеек. Последнее значение запоминаем во временную переменную, потом предпоследнее нечетное двигаем на последнее место и т.д. Т.е. сдвиг делаем из конца в начало. Финальным этапом записываем число из переменной в первое нечетное. Таким же макаром гоняем и четные :) Еще один вариант - гонять попарно: Значения двух последних ячеек сохраняем в две переменные, делаем сдвиг, как и в предыдущем случае, только каждое число сдвигаем на +2, и потом значения из переменных записываем в первые две ячейки. :) Второй вариант прокатит с вектором любой длины; единственное, сначала надо будет определить, последняя ячейка четная или нет. Если да, то просто сдвигаем все, как я указал выше. Если нет - сдвигаем все числа, а переменные при записи меняем местами. Например, последняя ячейка вектора у нас четная. Значение предпоследней ячейки пишем в А, последней - в В. После сдвига содержимое А идет в 1-ю ячейку, содержимое В - во 2-ю. Если последняя ячейка нечетная, то содержимое А идет во 2-ю ячейку, содержимое В - в 1-ю. |
код составил перестановка работает не совсем как должна, переставляем справа налево, а должна слева на право.
Код:
#include <stdio.h> |
Часовой пояс GMT +4, время: 07:07. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.