【发布时间】:2015-09-22 21:06:32
【问题描述】:
我在做某事时遇到了困难,我想将一个数字转换为给定范围内的“等效”。
虽然这个概念很简单,但很难解释,所以我会尽力而为。
假设你有一个无限行的瓷砖,但虽然有无限数量的瓷砖,但重复的是完全相同的颜色图案,就像这样:
如您所见,我为每个图块指定了一个数字,但我们可以取一个范围,从 0 到 4,然后说:
0 为紫色
1 是蓝色
2是红色
3是绿色
4是黄色的
但是由于这种颜色模式是无限重复的,实际上,5 与 0 的颜色相同,6 与 1 的颜色相同,8 与 3 的颜色相同。
此外,我们不能忘记负数,例如 -1 将与 4 具有相同的颜色。
实际上,我想要做的是将任何给定的数字转换为我选择的范围的数字,这里是范围 [0;4],这样我就可以知道这个特定图块对应的颜色。
我也希望这种方法适用于其他范围,例如,如果我的范围是 [1;5] 甚至 [-7;-3],它也应该有效。
我已经找到了一种适用于[0;n] 范围(n 为正整数)和a 为另一个正整数的方法:
convertedNumber = a % (n+1)
这是它提供的游乐场:
但它仅适用于我描述的条件,经过数小时的努力,我仍然找不到任何好的解决方案来使其适用于任何数字,无论是正数还是负数,以及任何范围。
不要犹豫,在 cmets 中询问更多详细信息。
谢谢。
【问题讨论】:
-
范围是什么意思?如果您给定的范围是 [1,5] ...这里 1 仍然代表蓝色(因为它是第一种颜色)或红色(因为它是 1 的原始数字)?
-
也许将 max 和 min 之间的差异添加到 number 中,max 和 min 可以解决问题?
-
@karthik 当我说一个范围时,比如 [a,b],我的意思是包含在 a 和 b 中的所有整数,包括 a 和 b。所以对于 [1,5] 我们将有 1、2、3、4 和 5。
-
那么对于
-9,你想返回1?
标签: algorithm swift math logic