Форум «Всё о Паскале» _ Теоретические вопросы _ Сортировка массива.
Автор: dff 3.05.2011 22:25
Отсортировать элементы с нечетными значениями в порядке – возрастания, если сумма элементов с четными значениями больше суммы эле-ментов с нечетными; – убывания, если сумма элементов с четными значениями меньше суммы эле-ментов с нечетнымими.
Вопрос,как из массива выделить четные и нечетные элементы для дальнейшего сумирования?
Автор: IUnknown 3.05.2011 22:39
Будь внимательнее: элементы с нечетными значениями, или элементы с нечетными индексами? Обычно тут многие ошибаются...
Цитата
как из массива выделить четные и нечетные элементы для дальнейшего сумирования?
А не надо ничего выделять. Заводи два счетчика: один для четных значений, другой - для нечетных. А потом проходи по массиву циклом и суммируй элементы. Четность элементов проверяется любым из способов: либо (a[ i ] and 1 = 0), либо (a[ i ] mod 2 = 0), можно и так: not odd(a[ i ]). И добавляй, в зависимости от выполнения условия, либо к одному счетчику, либо к другому.
В поиске, кстати, можно поискать, реализация подобной сортировки мной выкладывалась. Как минимум один раз; может, кто-то еще свою постил - не помню.
Автор: -TarasBer- 3.05.2011 23:18
> – возрастания, если сумма элементов с четными значениями больше суммы эле-ментов с нечетными; > – убывания, если сумма элементов с четными значениями меньше суммы эле-ментов с нечетнымими.
А если равно?
Автор: dff 3.05.2011 23:26
ну циклом например
for i:=1 to N do begin if odd(i) then a:=b{нечет} else a:=c{чет}; b:=b+1; c:=c+1
end;
как то так?
Добавлено через 1 мин.
Цитата(-TarasBer- @ 3.05.2011 19:18)
> – возрастания, если сумма элементов с четными значениями больше суммы эле-ментов с нечетными; > – убывания, если сумма элементов с четными значениями меньше суммы эле-ментов с нечетнымими.
А если равно?
не сортировать
Автор: IUnknown 4.05.2011 1:08
Цитата
как то так?
Лучше - вот так:
s_even := 0; // сумма четных s_odd := 0; // сумма нечетных for i := 1 to n do if odd(a[ i ]) then // нечетный элемент ? s_odd := s_odd + a[ i ] else s_even := s_even + a[ i ];