Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Hornel
0 / 0 / 0
Регистрация: 05.05.2017
Сообщений: 15
1

Найти N самых маленьких элементов списка и сформировать из них новый список

13.06.2017, 09:12. Просмотров 336. Ответов 9
Метки нет (Все метки)

Найти N самых маленьких элементов списка и сформировать из них новый список
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2017, 09:12
Ответы с готовыми решениями:

Найти N наименьших елементов списка и сформировать из них новый список
Найти N наименьших елементов списка и сформировать из них новый список

Найти два самых больших и самых маленьких элементов массива
Одномерные массивы для обычных массивов и для класса Array. Составить программу нахождения двух...

Даны N (N<=10) чисел A[i]. Выведите сумму трех самых больших из них и сумму трех самых маленьких из них
И так вопрос таков: Вам даны N (N&lt;=10) чисел A. Выведите два числа: сумму трех самых больших из них...

По списку элементов сформировать новый список элементов согласно заданному списка порядковых номеров
Собственно, по списку элементов сформировать новый список элементов согласно заданному списка...

Составить программу нахождения двух самых больших (самых маленьких) элементов массива
Нужно решить до завтрешнего утра (8:00 - 9:00 крайние сроки) Составить программу нахождения двух...

9
_Ivana
4236 / 1947 / 248
Регистрация: 01.03.2013
Сообщений: 5,262
Записей в блоге: 22
13.06.2017, 13:15 2
Haskell
1
f = take n . sort
0
Curry
3116 / 2131 / 261
Регистрация: 01.06.2013
Сообщений: 4,598
Записей в блоге: 9
13.06.2017, 16:37 3
Haskell
1
f n = take n . sort
0
_Ivana
4236 / 1947 / 248
Регистрация: 01.03.2013
Сообщений: 5,262
Записей в блоге: 22
13.06.2017, 16:43 4
А блин, ну да. Писал сразу из головы, минуя компилятор.

ЗЫ можно еще после после сорта nub вклинить, смотря что подразумевается под "N самых маленьких"
0
13.06.2017, 16:43
Curry
13.06.2017, 16:46
  #5

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
Писал сразу из головы, минуя компилятор.
Для такого нужен компилятор?

0
_Ivana
4236 / 1947 / 248
Регистрация: 01.03.2013
Сообщений: 5,262
Записей в блоге: 22
13.06.2017, 16:54 6
Конечно, он для всего нужен и не повредит. Хотя, никто не утверждал, что наша n не задана во внешней лексической области видимости определения нашей лямбды, в этом случае кот верен.
0
Catstail
Модератор
25156 / 12833 / 2370
Регистрация: 12.02.2012
Сообщений: 20,916
13.06.2017, 20:17 7
При n << длины исходного списка лучше не сортировать:

Haskell
1
2
3
4
5
6
7
8
9
10
ins a [] = [a]
ins a (x:xs) | (a <= x) = a:x:xs
             | otherwise = x:(ins a xs)
 
task lst n = f lst n []
             where f [] _ acc = acc
                   f (x:xs) n acc = f xs n (take n $ ins x acc)
 
Main> task [6,1,4,8,0,-3,8,1,2,33,45,-9] 3
[-9,-3,0]
1
_Ivana
4236 / 1947 / 248
Регистрация: 01.03.2013
Сообщений: 5,262
Записей в блоге: 22
13.06.2017, 20:34 8
Цитата Сообщение от Catstail Посмотреть сообщение
При n << длины исходного списка лучше не сортировать
И снова строгие тени ML-ей формируют наши стереотипы. Я специально часто делаю акцент на том, что в ленивом Хаскеле все не так, как на самом деле Это волшебная страна, где минимальный элемент списка можно получать, взяв голову отсортированного, и ничего тебе за это не будет
1
Catstail
Модератор
25156 / 12833 / 2370
Регистрация: 12.02.2012
Сообщений: 20,916
13.06.2017, 20:45 9
Цитата Сообщение от _Ivana Посмотреть сообщение
и ничего тебе за это не будет
- а сортировка строгая или ленивая?
0
Curry
3116 / 2131 / 261
Регистрация: 01.06.2013
Сообщений: 4,598
Записей в блоге: 9
13.06.2017, 20:54 10
Вот она, из исходника
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
data Ordering = LT | EQ | GT
 
compare x y = if x == y then EQ
                     else if x <= y then LT
                     else GT
 
sort = sortBy compare
sortBy cmp = mergeAll . sequences
  where
    sequences (a:b:xs)
      | a `cmp` b == GT = descending b [a]  xs
      | otherwise       = ascending  b (a:) xs
    sequences xs = [xs]
 
    descending a as (b:bs)
      | a `cmp` b == GT = descending b (a:as) bs
    descending a as bs  = (a:as): sequences bs
 
    ascending a as (b:bs)
      | a `cmp` b /= GT = ascending b (\ys -> as (a:ys)) bs
    ascending a as bs   = as [a]: sequences bs
 
    mergeAll [x] = x
    mergeAll xs  = mergeAll (mergePairs xs)
 
    mergePairs (a:b:xs) = merge a b: mergePairs xs
    mergePairs xs       = xs
 
    merge as@(a:as') bs@(b:bs')
      | a `cmp` b == GT = b:merge as  bs'
      | otherwise       = a:merge as' bs
    merge [] bs         = bs
    merge as []         = as
1
13.06.2017, 20:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2017, 20:54

Найти 3 самых больших и 3 самых маленьких числа в двумерном массиве
Дан двумерный массив размерностью m x n, нужно найти и вывести 3 самых больших и 3 самых маленьких...

Сформировать новый список путем изменения порядка следования элементов на противоположный относительно исходного списка
Написать программу которая формирует новый список путем изменения порядка следования элементов на...

Найти сумму делителей для каждого из элементов массива, и сформировать из них новый массив
Задача: Дан целочисленный массив С из m элементов, m=22. Найти сумму делителей для каждого из его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.