当前位置: 首页 > news >正文

erlang练习题(四)

题目一

传入列表

L1=[K|]、L2=[V|]、L3=[{K,V}|_],L1和L2一一对应,L1为键列表,L2为值列表,L3为随机kv列表,

将L1和L2对应位合并成KV列表L4,再将L3和L4相加,相同key的value相加

如:L1=[a,b,c,d,e].L2=[1,2,3,4,5].L3=[{a,10},{e,20}].结果[{a,11},{b,2},{c,3},{d,4},{e,25}]

解答

merge(L1, L2, L3) ->KVlist = mergeKV(L1, L2, []), % 将L1和L2组合成KV列表List = mergeLists(KVlist, L3), % 将元组列表进行合并mergeMap(List). % 将列表内元组进行合并mergeKV(L1, L2) ->mergeKV(L1, L2, []).%% 组合为kv列表mergeKV([],[], Acc) -> lists:reverse(Acc);mergeKV([H1 | T1], [H2 | T2], Acc) ->mergeKV(T1, T2, [{H1, H2} | Acc]).%% 列表合并mergeLists(L1, L2) ->case L1 of[] -> L2;[H | T] -> [H | mergeLists(T, L2)]end.%% 合并列表内的Map对mergeMap(List) ->mergeMap(List, maps:new()).mergeMap([], AccMap) -> maps:to_list(AccMap);mergeMap([{Key, Value} | T], AccMap) ->NewValue = case maps:is_key(Key, AccMap) oftrue -> maps:get(Key,AccMap) + Value; % kv已存在则累加false -> Valueend,NewAccMap = maps:put(Key, NewValue, AccMap),mergeMap(T, NewAccMap).

题目二

传入任意I1、I2、D、Tuple四个参数,检查元组Tuple在索引I1、I2位置的值V1、V2,

如果V1等于V2则删除V1,把D插入V2前面,返回新元组,如果V1不等于V2则把V2替换为V1,返回新元组,注意不能报异常,不能用try,不满足条件的,返回字符串提示

解答

fun1(I1, I2, D, Tuple) ->V1 = element(I1, Tuple),io:format("V1 = ~p~n", [V1]),V2 = element(I2, Tuple),io:format("V2 = ~p~n", [V2]),case V1 =:= V2 oftrue ->Tuple2 = erlang:delete_element(I1, Tuple),erlang:insert_element(I2, Tuple2, D);false ->Tuple1 = erlang:setelement(I1, Tuple, V2),erlang:setelement(I2, Tuple1, V1)end.

题目三

实现斐波拉契数列 ,如 fib(5) 应该返回 [1,1,2,3,5]

解答

fib(N) ->ifN =:= 1 ->[1];N =:= 2 ->[1, 1];true ->fib(N, 3, [1, 1])end.%% 递归结束处理fib(N, N, Acc) ->[X ,Y| _] = Acc,lists:reverse([X + Y| Acc]);fib(N, Cur, Acc) ->[X ,Y| _] = Acc,fib(N, Cur + 1, [X + Y | Acc]).

题目四

计算某个数的阶乘

解答

fac(N) ->ifN =:= 0 -> 1;true -> fac(N, N, 1)end.fac(_, 0, Acc) -> Acc;fac(N, Cur, Acc) ->fac(N, Cur - 1, Acc * Cur).

题目五

对一个字符串按指定字符划分

比如”abc-kkkk-s123“ 按照-划分,得到字符串列表[“abc”, “kkkk”, “s123”]

解答

split(_, []) ->[];split(Delimiter, String) when is_binary(Delimiter), is_binary(String) ->split(binary_to_list(Delimiter), binary_to_list(String));split(Delimiter, String) when is_list(Delimiter), is_list(String) ->%% 将String每个字符按照fun的规则划分成两部分case lists:splitwith(fun(C) -> C /= hd(Delimiter) end, String) of{Part, []} -> %% 没有划分字符了[Part];{Part, [_ | Rest]} ->[Part | split(Delimiter, Rest)]end.

题目六

将列表中的integer, float, atom转成字符串并合并成一个字个字符串:[1, a, 4.9, sdfds] 结果:1a4.9sdfds

解答

conv_to_str(Value) when is_integer(Value) ->integer_to_list(Value);conv_to_str(Value) when is_float(Value) ->float_to_list(Value);conv_to_str(Value) when is_atom(Value) ->atom_to_list(Value).list_to_str([]) -> [];list_to_str([H | T]) ->ConvertedHead = conv_to_str(H),Rest = list_to_str(T),ConvertedHead ++ Rest.

题目七

检查一个字符串是否为回文串

解答

判断两头字符是否相等,然后判断中间字符串是否为回文串(递归)

is_palindrome(Str) ->is_palindrome(Str, 1, length(Str)).is_palindrome(_,Beg, End) when Beg >= End ->true;is_palindrome(Str,Beg, End) when Beg < End ->case lists:nth(Beg, Str) =:= lists:nth(End, Str) oftrue -> is_palindrome(Str,Beg + 1, End - 1);_-> falseend.

题目八

将一个字符串中的所有字符翻转

解答

reverse_str(Str) ->reverse_str(Str, "").reverse_str([], Acc) -> Acc;reverse_str([H|T], Acc) ->reverse_str(T, [H | Acc]).

题目九

查找一个字符串中的最长单词

find_longest_word(Str) ->% 使用空格分割字符串,得到单词列表Words = string:tokens(Str, " "),% 调用辅助函数来查找最长单词Longest = find_longest_word(Words, ""),% 返回最长的单词Longest.find_longest_word([], Longest) -> Longest;
find_longest_word([Word | Rest], Longest) ->% 计算当前单词的长度WordLength = string:len(Word),OldLength = string:len(Longest),NewLongest = ifWordLength > OldLength -> Word;true -> Longestend,% 递归处理find_longest_word(Rest, NewLongest).

题目十

查找一个字符串中出现次数最多的字符

解答

find_most_common_char(Str) ->{CharCountMap, MostCommonChar} = find_most_common_char(Str, #{}, 0, $a),% 返回出现次数最多的字符和出现次数%{MostCommonChar, maps:get(MostCommonChar, CharCountMap)},io:format("~c:~w~n", [MostCommonChar, maps:get(MostCommonChar, CharCountMap)]).find_most_common_char([], CharCountMap, _, MostCommonChar) ->{CharCountMap, MostCommonChar};
% 辅助函数,用于递归查找出现次数最多的字符
find_most_common_char([Char | Rest], CharCountMap, MaxCount, MostCommonChar) ->% 更新字符出现次数% fun(Count) -> Count + 1 end  Count表示Char对应的value,并且将value改变为Count+1NewCharCountMap = maps:update_with(Char, fun(Count) -> Count + 1 end, 1, CharCountMap),% 获取当前字符出现次数CharCount = maps:get(Char, NewCharCountMap),case CharCount > MaxCount oftrue ->find_most_common_char(Rest, NewCharCountMap, CharCount, Char);false ->find_most_common_char(Rest, NewCharCountMap, MaxCount, MostCommonChar)end.

相关文章:

erlang练习题(四)

题目一 传入列表 L1[K|]、L2[V|]、L3[{K,V}|_]&#xff0c;L1和L2一一对应&#xff0c;L1为键列表&#xff0c;L2为值列表&#xff0c;L3为随机kv列表&#xff0c; 将L1和L2对应位合并成KV列表L4&#xff0c;再将L3和L4相加&#xff0c;相同key的value相加 如&#xff1a;L…...

YoloV5实时推理最短的代码

YoloV5实时推理最简单代码 import cv2 import torch# 加载YOLOv5模型 model torch.hub.load(ultralytics/yolov5, yolov5s)# 使用CPU或GPU进行推理 device cuda if torch.cuda.is_available() else cpu model.to(device)# 打开摄像头&#xff08;默认摄像头&#xff09; cap…...

Tensorflow、Pytorch和Ray(张量,计算图)

1.深度学习框架&#xff08;Tensorflow、Pytorch&#xff09; 1.1由来 可以追溯到2016年&#xff0c;当年最著名的事件是alphago战胜人类围棋巅峰柯洁&#xff0c;在那之后&#xff0c;学界普遍认为人工智能已经可以在一些领域超过人类&#xff0c;未来也必将可以在更多领域超过…...

TinyWebServer学习笔记-让程序跑起来

目标&#xff1a;通过这个HTTP项目熟悉网络编程 系统&#xff1a;Ubuntu20.04 首先&#xff0c;学习的第一步就是先让程序跑起来&#xff0c;使用git将项目下载到虚拟机内&#xff1a; git clone https://github.com/qinguoyi/TinyWebServer.git 提前把MySQL数据库安装好&am…...

_tkinter.TclError: no display name and no $DISPLAY environment variable 解决

启动kohya_ss时可能会发生错误&#xff1a; _tkinter.TclError: no display name and no $DISPLAY environment variable 解决办法&#xff1a; 1、apt-get install xvfb //安装xvfb // 启动虚拟显示器 2、Xvfb :99 -screen 0 1024x768x16 & export DISPLAY:99 ps aux…...

我出手了!

时光飞逝&#xff0c;程序员小灰这个微信公众号&#xff0c;已经运营整整7年时间了。 在这7年里&#xff0c;小灰输出过各种各样的文章和视频&#xff0c;有讲编程技术的&#xff0c;有讲职业规划的&#xff0c;有讲互联网行业新闻的&#xff0c;也有讲自己个人生活的。 不过&a…...

springboot的配置文件(properties和yml/yaml)

springboot的配置文件有两种格式分别是properties和yml/yaml 创建配置文件 在创建springboot项目时候&#xff0c;会默认生成application.properties这种格式 书写风格 端口 application.propertis server.port8080 application.yml server:port: 8080 连接数据库 applica…...

SLAM面试笔记(7) — Linux面试题

目录 问题1&#xff1a;Linux系统基本组件&#xff1f; 问题2&#xff1a;Linux和Unix有什么区别&#xff1f; 问题3&#xff1a;Linux下编译程序 问题4&#xff1a;gcc基本格式和常用指令 问题5&#xff1a;用什么命令查找内存和交换使用情况&#xff1f; 问题6&#xf…...

QUIC不是TCP的替代品

QUIC取代了TCP成为HTTP3的基础传输协议&#xff0c;不是因为QUIC能够取代TCP的所有应用场景&#xff0c;而是因为QUIC更适合HTTP的请求/响应业务模型。原文: QUIC Is Not a TCP Replacement TCP新规范(RFC 9293)的发布是网络界的一件大事&#xff0c;值得围绕这一主题发表第二篇…...

计算机竞赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 行人车辆目标检测计数系统 …...

GPT系列模型解读:GPT-1

GPT系列 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一系列基于Transformer架构的预训练语言模型&#xff0c;由OpenAI开发。以下是GPT系列的主要模型&#xff1a; GPT&#xff1a;GPT-1是于2018年发布的第一个版本&#xff0c;它使用了12个Transformer…...

王杰国庆作业day3

父子进程对话 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <my_head.h> int main(int argc, const char *argv[]) {mkfifo("./fifo1",0664);mkfifo("./fifo2",0664);pid_t cpid fork();if(0 < cp…...

量子计算基础知识—Part1

1.什么是量子计算机&#xff1f; 量子计算机是基于量子力学原理构建的机器&#xff0c;采用了一种新的方法来处理信息&#xff0c;从而使其具有超强的功能。量子计算机使用Qubits处理信息。 2. 什么是量子系统&#xff1f; 一个量子系统指的是由量子力学规则描述和控制的物理…...

【PostgreSQL】【存储管理】表和元组的组织方式

外存管理负责处理数据库与外存介质(PostgreSQL8.4.1版本中只支持磁盘的管理操作)的交互过程。在PostgreSQL中&#xff0c;外存管理由SMGR(主要代码在smgr.c中)提供了对外存的统一接口。SMGR负责统管各种介质管理器&#xff0c;会根据上层的请求选择一个具体的介质管理器进行操作…...

VSCode安装图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍VSCode的安装过程及其注意事项。 下载VSCode 请在官方网站 https://code.visualstudio.com/ 下载https://code.visualstudio.com/至本地&…...

vscode 无法打开源文件

以下是c/c插件的intelligense设置情况&#xff1a; 解决办法&#xff1a; 重新安装vsode无用&#xff1b;重新下载mingw64&#xff0c;管用了&#xff01;&#xff08;我猜可能是之前换电脑移植文件的时候导致了部分文件丢失&#xff09;...

1.8.C++项目:仿muduo库实现并发服务器之eventloop模块的设计

项目完整在&#xff1a; 文章目录 一、eventloop模块&#xff1a;进行事件监控&#xff0c;以及事件处理的模块二、提供的功能三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 四、框架五、代码 一、eventloop模…...

Linux基本指令(二)

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…...

量化交易全流程(五)

本节目录 策略回测 多因子模型 本节主要讨论回测相关的内容&#xff0c;包括两种不同的回测机制&#xff0c;即向量化回测和事件驱动回测&#xff1b;如何灵活使用开源工具来编写自己的回测程序&#xff1b;不同实现方式的优劣对比等。 在我们研究策略的时候&#xff0c;需要…...

聊聊MySQL的InnoDB引擎与MVCC

目录 一、InnoDB引擎 1.1逻辑存储结构 1). 表空间 2). 段 3). 区 4). 页 5). 行 1.2架构 1.2.1内存结构 1). Buffer Pool 2). Change Buffer 3). Adaptive Hash Index 4). Log Buffer 1.2.2磁盘结构 1). System Tablespace 2). File-Per-Table Tablespaces 3). …...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...