25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
1

Дан массив произвольной длины, элементы которого в интервале от -10 до 10

22.07.2014, 19:23. Показов 1192. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно все нули собрать в начале массива.

Например:

[5,0,0,-4,5,0,3,3,5,0,-2,0,0] -> [0,0,0,0,0,0,5,-4,5,3,3,5,-2]

Какая стратегия здесь нужна?

Добавлено через 42 минуты
Есть что нибудь другое
Код
let rec map = 
    function 
    | [] -> []
    | h :: t when h = 0 -> h :: map t
    | h :: t -> map t @ [ h ]

map [ 5; 0; 0; -4; 5; 0; 3; 3; 5; 0; -2; 0; 0 ]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2014, 19:23
Ответы с готовыми решениями:

Дан массив В из N строк произвольной длины.Сформировать массив В,каждый элемент которого равен последнему символу соответствующей строки.
Дан массив В из N строк произвольной длины.Сформировать массив В,каждый элемент которого равен...

Дан массив из n слов произвольной длины (длина слова не превышает 80 символов)
Всем привет! Помогите пожалуйста. Дан массив из n слов произвольной длины (длина слова не...

Дан массив А. Сформировать массив В, элементы которого вычисляются по формуле
Дан массив А. Сформировать массив В, элементы которого вычисляются по формуле = (i+1)*

Дан массив из 25 элементов. Сформировать из него новый массив, элементы которого кратны 5
Помогите решить задачу. Дан массив из 25 элементов. Сформировать из него новый массив, элементы...

16
Эксперт Java
4452 / 2684 / 483
Регистрация: 28.04.2012
Сообщений: 8,539
22.07.2014, 19:35 2
Цитата Сообщение от oolegg Посмотреть сообщение
Есть что нибудь другое
А чем тебе это не нравится?
0
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
22.07.2014, 19:53  [ТС] 3
Цитата Сообщение от korvin_ Посмотреть сообщение
А чем тебе это не нравится?
Как обойтись без рекурсии.
0
Эксперт Java
4452 / 2684 / 483
Регистрация: 28.04.2012
Сообщений: 8,539
22.07.2014, 19:59 4
Цитата Сообщение от oolegg Посмотреть сообщение
Как обойтись без рекурсии.
Так?

C#
1
2
3
4
5
6
7
8
9
10
let folder state x =
  match state with
  | (zeros, others) ->
    match x with
    | 0 -> (0::zeros, others)
    | n -> (zeros, n::others)
 
let zerosFirst xs =
  match List.fold folder ([], []) xs with
  | (zeros, others) -> List.append zeros others
1
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.07.2014, 20:00 5
Цитата Сообщение от oolegg Посмотреть сообщение
Есть что нибудь другое
этот вариант реверсирует ненулевые элементы

другие варианты (на самостоятельную имплементацию)
1) такой же вариант без реверса ненулевых элементов
2) 2 фильтра
3) 1 фильтр
4) partition
5) рекурсивная функция с хвостовой рекурсией
1
Эксперт Java
4452 / 2684 / 483
Регистрация: 28.04.2012
Сообщений: 8,539
22.07.2014, 20:01 6
Цитата Сообщение от pycture Посмотреть сообщение
partition
Черт, у меня как раз эта функция вылетела из головы.
0
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
22.07.2014, 20:12  [ТС] 7
Цитата Сообщение от pycture Посмотреть сообщение
этот вариант реверсирует ненулевые элементы
другие варианты (на самостоятельную имплементацию)
1) такой же вариант без реверса ненулевых элементов
2) 2 фильтра
3) 1 фильтр
4) partition
5) рекурсивная функция с хвостовой рекурсией
из двух зол выбирают наименьшее, какой посоветуете? partition?

Цитата Сообщение от pycture Посмотреть сообщение
на самостоятельную имплементацию
Можно пока что пример с хвостовой рекурсией.Мне бы в картинках.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.07.2014, 20:15 8
Цитата Сообщение от oolegg Посмотреть сообщение
из двух зол выбирают наименьшее, какой посоветуете
я советую сделать все. для понимания отличий

Добавлено через 43 секунды
Цитата Сообщение от oolegg Посмотреть сообщение
Можно пока что пример с хвостовой рекурсией.Мне бы в картинках.
так не интересно. пробуйте. поправим
к томуже korvin_ ее почти сделал. немного подпилить и будет с хвостовой рекурсией
1
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
22.07.2014, 21:35  [ТС] 9
Цитата Сообщение от pycture Посмотреть сообщение
так не интересно
Только если вы пойдете на встречу.
Цитата Сообщение от pycture Посмотреть сообщение
я советую сделать все. для понимания отличий
если только постепенно

Добавлено через 37 минут
Цитата Сообщение от pycture Посмотреть сообщение
к томуже korvin_ ее почти сделал. немного подпилить и будет с хвостовой рекурсией
Код
let der m x = 
    match m with
    | z -> 
        match x with
        | 0 -> 0 :: z
        | n -> z @ [ n ]

let map x = List.fold der ([]) x

map [ 5; 0; 0; -4; 5; 0; 3; 3; 5; 0; -2; 0; 0 ]
Добавлено через 32 минуты
Цитата Сообщение от oolegg Посмотреть сообщение
4) partition
Код
let map = function 
    | n, m -> n @ m
let wrt m = map (List.partition (fun elem -> elem = 0) m)

wrt [ 9; 0; 6; 7; 0; 0; 0; 5; 6; 5; 5; 4; 5; 0 ]
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
22.07.2014, 21:38 10
хм....
хвостовую рекурсию копать здесь
Код
let map xs= 
    let rec loop acc xs =
        match acc with
        | (zeros, others) ->
            match xs with
            | 0 :: t -> ....
            | h :: t -> ....
            | [] -> ....
    loop ([], []) xs
Добавлено через 1 минуту
партишн можно попроще написать
Код
let map xs = let a, b = List.partition ((=)0) xs in a @ b
1
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
22.07.2014, 22:34  [ТС] 11
Цитата Сообщение от pycture Посмотреть сообщение
партишн можно попроще написать
Спасибо,учту

Добавлено через 44 минуты
Цитата Сообщение от pycture Посмотреть сообщение
хм....
хвостовую рекурсию копать здесь
а так не пойдет что ли?
Код
let map m = 
    let rec loop m acc = 
        match m with
        | [] -> acc
        | 0 :: t -> loop t (0 :: acc)
        | h :: t -> loop t (acc @ [ h ])
    loop m []

map [ 5; 0; 0; -4; 5; 0; 3; 3; 5; 0; -2; 0; 0 ]
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.07.2014, 06:55 12
Цитата Сообщение от oolegg Посмотреть сообщение
а так не пойдет что ли?
можно и так. только операция @ достаточно затратна по времени и по возможности ее надо избегать
1
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
23.07.2014, 07:15  [ТС] 13
Добавлено через 1 минуту
Цитата Сообщение от pycture Посмотреть сообщение
только операция @ достаточно затратна по времени и по возможности ее надо избегать
А как без нее будет?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.07.2014, 08:37 14
Цитата Сообщение от oolegg Посмотреть сообщение
А как без нее будет?
совсем без нее не будет, но ее достаточно вызвать 1 раз (как с партишном), а не внутри каждой интерации
шаблон для этого я показывал
1
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
23.07.2014, 09:54  [ТС] 15
Цитата Сообщение от pycture Посмотреть сообщение
совсем без нее не будет, но ее достаточно вызвать 1 раз (как с партишном), а не внутри каждой интерации
шаблон для этого я показывал
Так?
Код
let mapi m = 
    let rec loop acc m = 
        match acc with
        | z, s -> 
            match m with
            | 0 :: t -> loop (0 :: z, s) t
            | h :: t -> loop (z, h :: s) t
            | [] -> acc
    loop ([], []) m

let map x = 
    let a, b = mapi x
    a @ b

map [ 5; 0; 0; -4; 5; 0; 3; 3; 5; 0; -2; 0; 0 ]
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
23.07.2014, 10:32 16
Цитата Сообщение от oolegg Посмотреть сообщение
Так?
так. практически mapi и есть самописный partition с захаркоденой функцией отбора
1
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
23.07.2014, 11:47  [ТС] 17
Цитата Сообщение от pycture Посмотреть сообщение
так. практически mapi и есть самописный partition с захаркоденой функцией отбора
остались фильтры.

Добавлено через 55 минут
Код
let map m = List.filter ((=) 0) m @ List.filter ((<>) 0) m

map [ 0; 5; -6; 0; 0; 0; 5; 0; 3; -1 ]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2014, 11:47
Помогаю со студенческими работами здесь

Дан символьный массив А. Получить целочисленный массив В, элементы которого имеют коды ASCII элементов A
через процедуры, ascii код Дан символьный массив А, состоящий из 8 элементов. Получить...

Вычислить среднее арифметическое элементов массива произвольной длины, находящихся в заданном интервале
Помогите пожалуйста: Напишите программу решения следующей задачи: Вычислить среднее арифметическое...

Дан массив X.Вычислить и напечатать массив Y, элементы которого определяются по формуле |y[i]=x[i]-B|, где B - максимальный элемент массива X
1) Дан массив X.Вычислить и напечатать массив Y, элементы которого определяются по формуле |y=x-B|,...

Дан массив размера N, все элементы которого, кроме первого, упорядочены по возрастанию. Сделать массив упорядоченным
Дан массив размера N, все элементы которого, кроме первого, упорядочены по возрастанию. Сделать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru