python – 确定值是否在多个范围内的算法
发布时间:2020-12-20 11:31:35 所属栏目:Python 来源:网络整理
导读:算法问题: 假设我想确定一个值是否在十几倍的范围内(例如2) – 所以,8-12,18-22,28-32等. 我目前的解决方案是将范围添加到值,mod乘以10,然后重新减去范围 – 从而留下-2到8的东西 – 然后检查绝对值是否小于所需范围. value = 38range = 2cycle = 10tweaked
算法问题:
假设我想确定一个值是否在十几倍的范围内(例如2) – 所以,8-12,18-22,28-32等. 我目前的解决方案是将范围添加到值,mod乘以10,然后重新减去范围 – 从而留下-2到8的东西 – 然后检查绝对值是否小于所需范围. value = 38 range = 2 cycle = 10 tweaked_mod = ((value + range) % cycle) - range # tweaked_mod = -2 within_range = (abs(tweaked_mod) <= range) # within_range = True 与: value = 37 range = 2 cycle = 10 tweaked_mod = ((value + range) % cycle) - range # tweaked_mod = 7 within_range = (abs(tweaked_mod) <= range) # within_range = False 它有效,但很尴尬. 我在这里错过了一个更直观/简洁的算法吗? 解决方法
我发现这个解决方案更容易理解:
remainder = (value % cycle) (remainder <= range) || (cycle - remainder) <= range 基本上我找到了我在模数(循环)方面搜索的剩余值,然后检查它是否在预期范围内. 替代方案: 另一种解决方案(基本上是相同的)将是: remainder = (value % cycle) min(remainder,cycle - remainder) <= range 您可以自由选择您更喜欢的两种解决方案中的任何一种. 注意如果范围<1,则该算法逐字工作.周期.在其他情况下,答案总是如此. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |