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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2011, 12:08   #1
vadiprog
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 96
По умолчанию Массив

Целочисленный массив X из n элементов разбит на m фрагментов. В целочисленном массиве K из m элементов хранятся длины соответствующих фрагментов (все K[i] различны, их сумма равна n). Упорядочить массив K по возрастанию, переставив соотвествующие фрагменты в массиве X.
vadiprog вне форума Ответить с цитированием
Старый 04.11.2011, 12:33   #2
vadiprog
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 96
По умолчанию

к примеру есть массив X[10]=1,2,3,4,5,6,7,8,9,10. разделили его на 4 неравные части. 1ый фрагмент: 1,2,3. 2ой: 4. 3ий: 5,6,7,8. 4ий: 9,10. и массив получился к[4]= 3,1,4,2. потом сортируем массив х, чтобы массив к стал упорядочным. тогда будет х[10]=4,9,10,1,2,3,5,6,7,8 и к[4]=1,2,3,4.

Вот как должно работать, помогите программу написать
vadiprog вне форума Ответить с цитированием
Старый 04.11.2011, 13:47   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Надеюсь, второй массив завести можно?
Первое, что нам понадобится - карта массива K. Это такой массив S, что i-ый его элемент содержит индекс i-го по возрастанию элемента K. Например (индексы от 0):
Код:
K = {3, 1, 4, 2}    K = {4, 9, 6, 1, 3}
S = {1, 3, 0, 2}    S = {3, 4, 0, 2, 1}
Как его получить? Ну, например, скопировать массив K в массив K`, завести массив S, инициализировав его упорядоченной последовательностью {0, 1, 2, ..., m-1} (индексы от 0), а потом упорядочить K`, но всякий раз, когда в массиве K` будут меняться местами два элемента, одновременно менять элементы с теми же индексами в массиве S. Проверьте сами, что способ работает (он аналогичен тому, как в линейной алгебре получают обратную матрицу, приписывая к исходной сбоку единичную).

Ну, а дальше мы заводим массив X` и последовательно, для каждого элемента S определяемся, какому фрагменту в X он соответствует и дописываем этот фрагмент в X`. В примере,
S[0]=1, сумма K[i<1] равна 3, K[1]+3=4, в X` добавляются X[3<=i<4];
S[1]=3, сумма K[i<3] равна 8, K[3]+8=10, в X` добавляются X[8<=i<10];
S[2]=0, сумма K[i<0] равна 0, K[0]+0=3, в X` добавляются X[0<=i<3];
S[3]=2, сумма K[i<2] равна 4, K[2]+4=8, в X` добавляются X[4<=i<8];
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W leha_demi Помощь студентам 2 24.09.2011 18:12
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02