Показать сообщение отдельно
  (#39 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 26.12.2017, 15:08

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
есть совсем уж простое решение с трёмя проходами (хотя формально с 6-ю)...
Ну да. Но зачем фсе эти понты, которые к тому же студенту не простят?!)))
От студента ждут чего-нибудь такое:
Visual Prolog Код:
p(0, _ ) = [] :- !.
p(N, List) = [ M | p(N-1, list::remove(List,M)) ] :- M = list::maximum(List).

Три прохода таки зажали - ну, чиво Вы тама, в сет-е индексы храните?! Гениально.
Я эту страшную тайну тоже никому не скажу!!!
Но сет студенту не пропустят.

Если кому-то когда-то почему-то придётся в промышленных масштабах ворочать
"M каких-то из списка длинной N", то попробуйте таки посортировать.
Слиянием, конечно. На этапе этого слияния и усекать до нужной длины М.
В ВИПе это просто: добавить один аргумент и одну голову в
merge2 : (comparator{A}, A*, A*) -> A*(класс list).
Мона ещё и на этапе разбиения исходного на подсписки до М рубить, но есть пара "но"))).

И это, таво, С Наступающим, каникулы, мля)))
Ответить с цитированием
Ads