25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
|
|
1 | |
Дан массив произвольной длины, элементы которого в интервале от -10 до 1022.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
|
|
22.07.2014, 19:23 | |
Ответы с готовыми решениями:
16
Дан массив В из N строк произвольной длины.Сформировать массив В,каждый элемент которого равен последнему символу соответствующей строки. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов) Дан массив А. Сформировать массив В, элементы которого вычисляются по формуле
|
![]() 4452 / 2684 / 483
Регистрация: 28.04.2012
Сообщений: 8,539
|
|
22.07.2014, 19:35 | 2 |
0
|
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
|
|
22.07.2014, 19:53 [ТС] | 3 |
0
|
![]() 4452 / 2684 / 483
Регистрация: 28.04.2012
Сообщений: 8,539
|
||||||
22.07.2014, 19:59 | 4 | |||||
Так?
1
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
22.07.2014, 20:00 | 5 |
этот вариант реверсирует ненулевые элементы
другие варианты (на самостоятельную имплементацию) 1) такой же вариант без реверса ненулевых элементов 2) 2 фильтра 3) 1 фильтр 4) partition 5) рекурсивная функция с хвостовой рекурсией
1
|
![]() 4452 / 2684 / 483
Регистрация: 28.04.2012
Сообщений: 8,539
|
|
22.07.2014, 20:01 | 6 |
0
|
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
|
|
22.07.2014, 20:12 [ТС] | 7 |
из двух зол выбирают наименьшее, какой посоветуете? partition?
Можно пока что пример с хвостовой рекурсией.Мне бы в картинках.
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
22.07.2014, 20:15 | 8 |
я советую сделать все. для понимания отличий
Добавлено через 43 секунды так не интересно. пробуйте. поправим к томуже korvin_ ее почти сделал. немного подпилить и будет с хвостовой рекурсией
1
|
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
|
|
22.07.2014, 21:35 [ТС] | 9 |
Только если вы пойдете на встречу.
если только постепенно Добавлено через 37 минут Код
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 ] Код
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 партишн можно попроще написать Код
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 |
Спасибо,учту
Добавлено через 44 минуты а так не пойдет что ли? Код
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 |
можно и так. только операция @ достаточно затратна по времени и по возможности ее надо избегать
1
|
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
|
|
23.07.2014, 07:15 [ТС] | 13 |
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
23.07.2014, 08:37 | 14 |
совсем без нее не будет, но ее достаточно вызвать 1 раз (как с партишном), а не внутри каждой интерации
шаблон для этого я показывал
1
|
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
|
|
23.07.2014, 09:54 [ТС] | 15 |
Так?
Код
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 |
так. практически mapi и есть самописный partition с захаркоденой функцией отбора
1
|
25 / 23 / 3
Регистрация: 10.07.2014
Сообщений: 590
|
|
23.07.2014, 11:47 [ТС] | 17 |
остались фильтры.
Добавлено через 55 минут Код
let map m = List.filter ((=) 0) m @ List.filter ((<>) 0) m map [ 0; 5; -6; 0; 0; 0; 5; 0; 3; -1 ]
0
|
23.07.2014, 11:47 | |
Помогаю со студенческими работами здесь
17
Дан массив X.Вычислить и напечатать массив Y, элементы которого определяются по формуле |y[i]=x[i]-B|, где B - максимальный элемент массива X Дан массив размера N, все элементы которого, кроме первого, упорядочены по возрастанию. Сделать массив упорядоченным Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |