我试图将一个数钳制为一系列数的较低值。例如,如果我有一个系列(对不起,记法不好)
[pq]
其中p
是任意整数,q
是任意正数。
假设q是50,我的系列将是-150, -100, -50, 0, 50, 100, 150
现在我想要的是有一个函数f(y)
,它将把任何数字钳制到序列中下一个最低的数字。
例如,如果我有一个数字37
,我会期待f(37)=0
,我会期待f(-37)=-50
。
我尝试过许多涉及模和整数除法的算法,但我似乎弄不懂。我最近试过的例子就是
(37/q)*q
这对正数非常有效,但对-50到0之间的任何数字都不起作用。
我也尝试过((37-q)/q)*q
,但这对完全在系列中出现的阴性病例不起作用。
编辑
假设我没有整个序列,只有序列的乘法器p
。
一旦确定了模数结果为正,就可以减去它。在某些语言中,它总是积极的,但如果不是:
mod = p % q
positive_mod = (mod + q) % q
answer = p - positive_mod
结果C:https://ideone.com/kIuit8
在Python中生成:https://ideone.com/w6wUgZ
如果你想要一种纯粹的数学方法,而不考虑计算效率,你可以通过添加一个大于或等于|p |
且是q
的倍数的正整数,将输入的p
移到正整数范围内,然后再通过减法将其移回p^2*q
满足了这一点。
这就给出了:((p^2*q)/q)*q-p^2*q
您只需使用整数欧几里得除法将y
除以q
,然后再次将结果乘以q
。
f(y) = (y / q) * q
其中,/
表示欧几里得除法。
在不立即支持欧氏除法的编程语言中,您必须手动实现它,或者调整语言支持的任何除法的结果。
例如,在C和C中,正除数的欧几里德除法q
可以通过原生的“Fortran风格”除法实现,如下所示:
(y >= 0 ? y : y - q + 1) / q
所以在C或C中,整个表达式看起来像
f(y) = (y >= 0 ? y : y - q + 1) / q * q
对于37
你得到
f(37) = 37 / 50 * 50 = 0
对于-37
你得到
f(-37) = (-37 - 50 + 1) / 50 * 50 = -86 / 50 * 50 = -50
问题内容: 我想按从高到低的顺序进行排序。 问题答案: java.util.Collections.sort(列表,比较器) 您将需要写一个
问题内容: 我正在寻找有关如何在Python中将一个范围值转换为另一范围值的想法。我正在从事硬件项目,正在从可返回一定范围值的传感器读取数据,然后使用该数据来驱动需要不同范围值的执行器。 例如,假设传感器返回的值在1到512的范围内,并且执行器由5到10的值驱动。我想要一个函数,我可以传递一个值和两个范围并取回该值映射到第二个范围。如果这样的函数被命名,则可以这样使用: 在此示例中,我希望输出为,
我可以用什么代码打印出用户在这个数组中输入的最高值和最低值?这个程序需要取用户输入的平均值(我已经做过了)。现在我所需要做的就是让程序打印出用户输入的最高值和最低值。
本文向大家介绍在Scala中找到列表的最后一个元素,包括了在Scala中找到列表的最后一个元素的使用技巧和注意事项,需要的朋友参考一下 假设我们在Scala中有一个列表,该列表在scala.collection.immutable包下定义。众所周知,列表是相同类型元素的集合,其中包含不可变(不可更改)数据。我们通常应用last函数来显示列表的最后一个元素。 使用最后一个关键字 以下Scala代码显
紧急联系人 基本描述 紧急联系人是乘车人在遇到紧急情况时向其发起帮助请求的人。设置紧急联系人时,可选择在特定时间段内开启自动行程分享功能。在该时段内,车辆位置和行程信息会通过短信自动分享给紧急联系人。在完成添加紧急联系人的情况下,乘车过程中乘车人如果触发紧急状态(如使用一键报警功能),系统会给乘客设置的所有紧急联系人发送短信,并在滴滴侧启动相应安全防护措施,最大程度地保护乘车人安全。紧急情况下,紧
我是java新手,我创建了两个arraylists,然后在while循环中向用户请求一个数字,一旦我从第1点和第2点获得了所需数量的数字。我将arrayllists转换为数组。我需要比较两个点阵,然后将最低点的缺失数字设置为零。例如 点1=(12,123,123,435,6756,667)//6个数字 点 2=(23,13,35)//3 个数字 点 3=(23,13,35,0,0,0)//新数组替