寻求仅用基础整数运算实现特定分段映射函数的优化方案
寻求仅用基础整数运算实现特定分段映射函数的优化方案
嘿,我来帮你梳理下这个问题的优化思路~首先明确我们的核心需求:用纯基础整数运算(加减乘、整数除法),把输入n ∈ {0,1,...,8}映射到目标输出[1,1,2,2,2,0,0,0,1],中间的关键步骤是先计算x ≡ (4+n) mod 9,再按x的区间返回对应值。
先拆解你的现有方案
你之前的思路是:先算x=(4+n)mod9,再通过(x - (x mod3))/3得到结果。这个逻辑是对的,但确实用到了两次模运算,而且需要切换到整数除法收尾,不算最简洁。
优化方案:用整数除法替代多次模运算
我们可以直接基于n构造一个无模运算的表达式,利用整数除法(也就是你说的“perfectly dividing integers”)的特性来实现分段逻辑:
f(n) = ((4 + n) // 3) - 3 * ((4 + n) // 9)
为什么这个表达式可行?
我们来拆解逻辑:
(4+n)//3:对4+n做整数除法,当n<5时,4+n在4-8之间,除法结果是1或2;当n≥5时,4+n在9-12之间,除法结果是3或4。(4+n)//9:因为4+n最大是12,所以这个值只能是0(当4+n<9,即n<5)或1(当4+n≥9,即n≥5),相当于自动完成了分段判断。- 最后用前者减去3倍的后者,刚好把
n≥5时的结果减3,完美匹配目标输出。
逐个验证结果(确保完全符合要求)
| n | (4+n) | (4+n)//3 | (4+n)//9 | 3*((4+n)//9) | f(n) | 目标输出 |
|---|---|---|---|---|---|---|
| 0 | 4 | 1 | 0 | 0 | 1 | 1 |
| 1 | 5 | 1 | 0 | 0 | 1 | 1 |
| 2 | 6 | 2 | 0 | 0 | 2 | 2 |
| 3 | 7 | 2 | 0 | 0 | 2 | 2 |
| 4 | 8 | 2 | 0 | 0 | 2 | 2 |
| 5 | 9 | 3 | 1 | 3 | 0 | 0 |
| 6 | 10 | 3 | 1 | 3 | 0 | 0 |
| 7 | 11 | 3 | 1 | 3 | 0 | 0 |
| 8 | 12 | 4 | 1 | 3 | 1 | 1 |
这个方案完全依赖题目允许的运算类型,没有用到任何模运算,逻辑简洁且易于理解,非常适合你处理矩阵元素的场景。
备注:内容来源于stack exchange,提问作者user3433489
相关产品推荐
相关产品推荐

