当前位置 : 主页 > 手机开发 > 其它 >

algorithm – 将数字转换为特定范围内的等效数字

来源:互联网 收集:自由互联 发布时间:2021-06-11
我做某事有困难,我想将一个数字转换为给定范围内的“等价物”. 虽然这个概念很简单,但很难解释,所以我会尽我所能. 假设你有一排无限的瓷砖,但是虽然有无数的瓷砖,但它是重复的完
我做某事有困难,我想将一个数字转换为给定范围内的“等价物”.
虽然这个概念很简单,但很难解释,所以我会尽我所能.

假设你有一排无限的瓷砖,但是虽然有无数的瓷砖,但它是重复的完全相同的颜色模式,如下所示:
  

正如你所看到的,我已经为每个图块添加了一个数字,但我们可以采用一个范围,从0到4,然后说:
0是紫色
1是蓝色
2是红色的
3是绿色的
4是黄色的

但是因为这种颜色模式无限重复,实际上,5将具有与0相同的颜色,6将具有与1相同的颜色,8将具有与3相同的颜色.
此外,我们不能忘记负​​数,例如,-1将具有与4相同的颜色.

实际上我想要做的是将任何给定的数字转换为我选择的范围的数量,这里的范围是[0; 4],这样我就知道什么颜色对应于这个特定的图块.
我也希望这种方法适用于其他范围,例如,如果我的范围是[1; 5]或甚至[-7; -3],它也应该有效.

我已经找到了一个适用于[0; n]范围(n为正整数)和另一个正整数的方法:

convertedNumber = a % (n+1)

以下是游乐场的内容:
  

但它的作用只是我描述的条件,经过几个小时的努力,我仍然找不到任何好的解决方案,使它适用于任何数字,正面或负面,以及任何范围.

不要犹豫,在评论中询问更多细节.

谢谢.

干得好.该函数采用您想要映射的数字,以及范围的低值和高值,并返回范围内的值:

func mapNum(n: Int, low lo: Int, high hi: Int) -> Int {
    let spread = hi - lo + 1
    return ((n - lo) % spread + spread) % spread + lo
}

例子:

mapNum(-9, low: 0, high: 4)    // returns "1"
mapNum(-9, low: -3, high: 1)   // returns "1"
mapNum(1, low: -11, high: -7)  // returns "-9"
mapNum(3, low: -8, high: -4)   // returns "-7"
mapNum(-5, low: 4, high: 8)    // returns "5"
mapNum(-5, low: -6, high: -2)  // returns "-5"
mapNum(-9, low: -7, high: -3)  // returns "-4"
网友评论