豆包AI刷题_105最佳人选

问题描述

某特种部队采用了一套性格密码机制来筛选执行特定任务的最佳士兵。每个人的性格可以通过m个维度来描述,每个维度分为A, B, C, D, E五种类型。同一维度内,字母距离越近,性格类型差异越小,匹配程度越高。例如,A和B的差异为1,A和D的差异为3。但需要注意的是,AE、BD、CE、BE为不相容性格类型,它们的差异值被设为无穷大(即无法匹配)。

现在,部队有一个重要的机密任务,要求找到最匹配该任务所需性格密码的士兵。如果有多个最佳人选,则按他们在array中出现的顺序,用空格隔开返回答案。

输入与输出
  • 输入:m(性格密码的维度),n(备选特种兵的数量),target(代表任务的性格密码),array(包含n个元素的列表,每个元素为m位的性格密码)。
  • 输出:最匹配任务性格密码的士兵性格密码,如果有多个最佳人选,则按在array中出现的顺序用空格隔开;如果没有匹配的士兵,则输出’None’。
解题思路
  1. 初始化:首先,我定义了一个变量min_diff,并将其初始化为无穷大(math.inf),用于存储当前找到的最小差异值。同时,我创建了一个空列表res_indices,用于存储具有最小差异值的士兵索引。

  2. 遍历array:然后,我遍历了array中的每个性格密码。对于每个性格密码,我初始化了一个变量diff为0,用于计算当前性格密码与target的差异值。

  3. 计算差异值:接下来,我遍历了每个性格密码的每个维度,并将当前维度上的字符与target中对应维度的字符进行比较。如果两个字符是不相容的性格类型,则将diff设置为无穷大,并跳出内层循环;否则,我使用abs(ord(x) - ord(y))计算两个字符的差异值,并将其累加到diff中。

  4. 更新最小差异值和索引:在遍历完一个性格密码的所有维度后,我检查diff是否小于min_diff。如果是,则更新min_diffdiff,并将res_indices重置为只包含当前性格密码索引的列表。如果diff等于min_diff,则将当前性格密码索引添加到res_indices中。

  5. 返回结果:最后,我使用列表推导式和join方法,根据res_indicesmin_diff的值,返回最匹配任务性格密码的士兵性格密码或’None’。

收获的经验
  1. 数组长度的处理:通过len(array),我能够轻松地获取备选特种兵的数量,并据此进行循环遍历。

  2. 字符差异值的计算:使用abs(ord(x) - ord(y))将字符转换为ASCII码,并计算它们之间的差异值,这是一种简洁而有效的方法。

  3. 不相容性格类型的处理:通过将不相容性格类型的组合存储在一个元组中,并使用in操作符进行判断,我能够避免大量的if-elseor-and逻辑判断,从而使代码更加简洁和易读。

  4. Python三元表达式的使用:在返回结果时,我使用了Python的三元表达式,这使得代码更加紧凑和优雅。

  5. 对Python语法的复习:在解决这个问题的过程中,我复习了Python的一些基本语法和函数,如列表推导式、join方法、ord函数等。这有助于巩固我的Python编程基础。

  6. 对刷题平台的反思:虽然刷题平台提供了大量的编程题目和模板代码,但有时模板代码和实际测试代码之间存在不一致之处,这需要我们进行额外的推理和调试。同时,我也注意到了一些平台可能存在的小bug或不足之处,如无法直接查看答案等。因此,在使用刷题平台时,我们需要保持谨慎和耐心,并充分利用平台提供的资源和功能来提高自己的编程能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值