Помощь - Поиск - Пользователи - Календарь
Полная версия: Разбиение и сортровка одномерного массива
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Slipknot
Дан массив X(N) (N<=60) причём кол-во элементов кратно 3. Разбить массив на 3 части и в каждой поменять наибольший элемент с наименьшим blink.gif blink.gif blink.gif
мисс_граффити
что не получается?
что пробовал?
Slipknot
У меня напряг как раз с этим РАЗБИТИЕМ
Reflex
Кхм...
странно казалось бы разбивать то и не надо просто хранишь начало первого и последнего члена нужной части
Slipknot
Ну так как найти концы этих частей ?
Reflex
ну смотри у тебя в массиве 3n элементов
тогда первая часть - 0_n-1, вторая- n_2n-1, третья 2n_3n-1
мисс_граффити
количество элементов ты знаешь => можешь посчитать, сколько будет в каждой части.
допустим, у нас 9 элементов, в каждой части по три.
первая часть (индексы): 1,2,3. вторая часть: 4,5,6. третья: 7,8,9.
то есть хранить надо 4 и 7.
а еще лучше - хранить только размер каждой части.
Reflex
помоему массив удобнее в этом случае с 0 номеровать
Slipknot
Размер каждой части - это круто, ну допустим их там девять эл-тов - размер части 3, их - 60 размер части - 20
и как же это по вашему в проге рассчитать?
Reflex
пусть n - количество элементов
размер части равен n div 3
значит первый элемент первой части - 0
последний элемент первой n div 3 - 1
второй - n div 3 => 2*(n div 3)-1
третmей 2*(n div 3)=> n-1
Reflex
 program Slipknot
var x : array [ 1..60 ] of integer;
n : integer;
size : integer;
min, min_id, max, max_id : integer;

procedure change(st, f : integer);
var i : integer;
begin
min_id:=st;
max_id:=st;
for i:= st to f do begin
if x[i]>x[max_id] then max_id:=i;
if x[i]<x[min_id] then min_id:=i;
end;
i:=x[min_id];
x[min_id]:=x[max_id];
x[max_id]:=i;
end;

var i:integer;
begin
read(n);
for i:= 1 to n do
read(x[i]);
size:=n div 3;
change(1,size);
change(size+1, 2*size);
change(2*size+1,n);
for i:= 1 to n do
write(x[i],' ');
readln;
readln;
end.

Вот готовый код, откомментируй его.
volvo
Цитата
Вот готовый код, откомментируй его.
Хочешь, я откомментирую? Он нерабочий:

Цитата
6
1
2
3
4
5
6
2 1 4 3 6 5
Последнее китайское предупреждение: Будь добра проверять программы ПЕРЕД выкладыванием на форум...
Malice
Цитата(volvo @ 27.10.2006 22:07) *

Хочешь, я откомментирую? Он нерабочий:

А почему, извините ? Вроде все ок.
123456 - -> [12][34][56] -> поменяли мин и мах ->[21][43][65]. Так и есть..
Ps Не, ну наплел конечно, но работает ;)
pps шутка
Slipknot
Спасибо give_rose.gif
Всё работает замечательно give_rose.gif
Reflex
Volvo читай условие внимательно!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.