在我的应用程序中,我需要通过算法运行一个5位数的数字,并在给定的时间间隔内返回一个数字,即:
函数编码,获取3个参数,5个数字的初始数,间隔下限和间隔上限,例如: int res = encode(12879,10,100)返回83。
该函数从12879开始并对数字执行某些操作并返回10到100之间的数字。这不能是随机的,每次将数字12879传递给encode函数时,必须始终返回相同的数字。
有什么想法吗?
谢谢, Direz
答案 0 :(得分:2)
你可以做一些简单的事情,比如
encode(x,y,z) --> y + (x mod (z-y))
答案 1 :(得分:2)
一种可能的方法:
这里的事情 - 你还没有对产生结果的“算法”定义任何约束或要求。如果您想要的只是将值映射到给定范围(不知道输入的分布,或输入值如何聚类等),您可以轻松地只取输入的范围模数没有散列(如Foo Bah演示)。
如果encode
方法的输入或输出存在某些约束,要求或分布,则该方法可能需要完全不同。但是,您是唯一知道您有哪些额外要求的人。
答案 2 :(得分:0)
此功能没有上限?
假设它是99999,因为它是5位数。对于您的情况,最简单的方法是:
int encode (double N,double H,double L)
{
return (int)(((H - L) / (99999 - 10000)) * (N - 10000) + 10);
}