• erlang练习题(二)


    题目一

    替换元组或列表中指定位置的元素,新元素作为参数和列表或元组一起传入函数内

    解答

    replaceIdx(List, Index, Val) ->
    
     replaceIdx(List, Index, Val, 1, []).
    
    
    replaceIdx([], _, _, _, Acc) ->
    
     lists:reverse(Acc);
    
    %% 到达替换位置的处理
    
    replaceIdx([_ | Rest], Index, Val, Index, Acc) ->
    
     io:format("[~p]~n", [[Val | Acc]]),
    
     replaceIdx(Rest, Index, Val, Index + 1, [Val | Acc]);
    
     
    
    replaceIdx([Element | Rest], Index, Val, CurrentIndex, Acc) ->
    
     io:format("[~p]~n", [[Element | Acc]]),
    
     replaceIdx(Rest, Index, Val, CurrentIndex + 1, [Element | Acc]).
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    题目二

    指定列表第几位之后的数据进行反转。如:指定[2,3,5,6,7,2]第3位后进行反转

    解答

    %% 和并两个列表 
    merge_list(List1, List2) ->
    	merge_list(List1, List2, []).
    
    merge_list([], [], Acc) -> lists:reverse(Acc);
    merge_list([H | T], List2, Acc) ->
    	merge_list(T, List2, [H | Acc]);
    merge_list([], [H | T], Acc) ->
    	merge_list([], T, [H | Acc]).
    
    %% 指定列表第几位之后的数据进行反转。如:指定[2,3,5,6,7,2]第3位后进行反转为 [2,3,5,2,7,6] 
    reverse_n(List, N) ->
    	Sublist = lists:sublist(List, N + 1, length(List) - N),
    	NewSublist = lists:reverse(Sublist),
    	merge_list(lists:sublist(List, 3), NewSublist).
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    题目三

    对列表进行过滤,输出列表所有的奇数和偶数

    解答

    filteroe(List) ->
    
     Odds = [X || X<-List, X rem 2 /= 0],
    
     Evens = [X || X<-List, X rem 2 == 0],
    
     io:format("Odds = ~p ~nEvens = ~p ~n", [Odds, Evens]).
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    题目四

    使用匿名函数对列表进行过滤,输出列表所有的奇数和偶数(可以使用API)

    解答

    filter_odd_even(List) ->
    
     Odds = lists:filter(fun(X) -> X rem 2 /= 0 end, List),
    
     Evens = lists:filter(fun(X) -> X rem 2 =:= 0 end, List),
    
     {Odds, Evens}.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    题目五

    对数字列表或者元组中所有的奇数进行求和

    解答

    sum_odd(List) ->
    
     lists:sum([X || X<- List, X rem 2 /= 0]).
    
    • 1
    • 2
    • 3

    题目六

    对数字列表或元组,输出所有偶数乘以它在此列表或元组中的偶数位数

    比如在列表[3,4,8,9,7,2,5]中8所在此列表中的偶数位数为2,2所在此元组中的偶数位数为3

    解答

    get_evens_mul_Idx(List) ->
    
     get_evens_mul_Idx(List, 1, []).
    
     
    
    %% 递归终止
    
    get_evens_mul_Idx([], _, Acc) -> lists:reverse(Acc);
    
     
    
    %% 处理遇到偶数的情况
    
    get_evens_mul_Idx([Value | Rest], Index, Acc) when Value rem 2 == 0 ->
    
     get_evens_mul_Idx(Rest, Index + 1, [Value * Index | Acc]);
    
     
    
    %% 非偶数的情况,下标增加,其他不变
    
    get_evens_mul_Idx([_ | Rest], Index, Acc) ->
    
     get_evens_mul_Idx(Rest, Index + 1, Acc).
    
    • 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

    题目七

    将指定的元素插入到列表或元组中指定的位置,列表或元组中后面的元素依次向后挪动

    解答

    insert_at(List, Index, Val) ->
    
     insert(List, Index, Val, 1, []).
    
     
    insert([], _, _, _, Acc) -> lists:reverse(Acc);
    
    %% 处理Index之前的元素,原样插入
    
    insert([Value | Rest], Index, Val, CurIdx, Acc) when CurIdx /= Index ->
    
     insert(Rest, Index, Val, CurIdx + 1, [Value | Acc]);
    
    
    %% 到达插入位置的处理
    
    insert(List, Index, Val, Index, Acc) ->
    
     insert(List, Index, Val, Index + 1, [Val | Acc]).
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    题目八

    用列表输出在列表或元组中查找到的的所有重复元素

    解答

    find_dup(Items) ->
    
     find_dup(Items, []).
    
    
    find_dup([], Duplicates) ->
    
     Duplicates;
    
    %% Acc 是用来存储重复值只存一次
    
    find_dup([Item | Rest], Acc) ->
    
     case lists:member(Item, Rest) and not lists:member(Item, Acc) of % 如果答案集合已经存在了重复元素,就不要加入
    
      true -> find_dup(Rest, [Item | Acc]);
    
      false -> find_dup(Rest, Acc)
    
     end.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    题目九

    删出列表或元组中的所有重复元素

    解答

    %% 思路:就是把元素加入到新的列表中,重复的不加入 0
    
    delete_dup(Items) ->
    
      delete_dup(Items, []).
    
    
    delete_dup([], Acc) -> Acc;
    
    delete_dup([Item | Rest], Acc) ->
    
     case lists:member(Item, Acc) of % 元素没有出现在结果集中就加入
    
      false -> delete_dup(Rest, [Item | Acc]);
    
      true -> delete_dup(Rest, Acc)
    
     end.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    题目十

    使用冒泡排序对列表进行排序(升序)

    解答

    %% 取列表头作为最大值和
    
    bubble_sort(List) ->
    
     bubble_sort(List, length(List)).
    
    
    bubble_sort(List, 0) -> List; % 当迭代次数为 0 时,排序完成
    
    bubble_sort(List, N) ->
    
     SortedList = bubble_pass(List, N), % 对列表进行下一趟冒泡,一个元素到达最终位置
    
     bubble_sort(SortedList, N - 1). % 递归的进行下一趟冒泡
    
    
    bubble_pass([X, Y | Rest], N) when X > Y ->
    
     [Y | bubble_pass([X | Rest], N - 1)]; % 如果 X > Y 就交换他们
    
    bubble_pass([X | Rest], N) ->
    
     [X | bubble_pass(Rest, N - 1)]; % 否则位置保持不变
    
    bubble_pass([], _) -> [].
    
    • 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
  • 相关阅读:
    Hazelcast系列(三):hazelcast管理中心
    处理验证码和登录页面
    1169: 大整数(指针专题)
    Scientific discovery in the age of artificial intelligence
    挑战30天学完Python:Day1火力全开-初识Python(含系列大纲)
    80页4万字政务综合服务平台建设项目方案书(完整版)
    什么是系统集成项目管理工程师,证书难考吗?
    【Python】取火柴小游戏(巴什博弈)
    网站AI客服,提升现代企业客户服务的利器
    MyBatis-Plus —— 初窥门径
  • 原文地址:https://blog.csdn.net/qq_42120843/article/details/132861281