如何将所有可能的整数分组为三个桶

时间:2014-06-02 21:47:28

标签: math switch-statement

我希望能够均匀,可重复,并且可预测地将输入的整数值切换为三种情况之一。如果是两个案例,那就很明显了。

伪代码:

switch (integer) {
    if even:
       something;
       break;
    if odd:
       something else;
       break;
}

我想做同样的事情,但对于三个案例,我有点难以理解如何做到这一点。可能是因为我不太擅长数学。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如何除以3?

switch (x % 3) { // compute the remainder 
  case 0: // 0, 3, 6, 9, ...
    something;
    break;
  case 1: // 1, 4, 7, 10, ...
    something;
    break;
  case 2: // 2, 5, 8, 11, ...
    something;
    break;
}  

您需要注意标志 - 有些语言会将(-5) % 3计算为-2而不是1,因此您可能需要使用abs(x) % 3代替{x % 3 1}}或添加case语句:

switch (x % 3) { // compute the remainder 
  case 0: // -6, -3, 0, 3, 6, 9, ...
    something;
    break;
  case 1: // 1, 4, 7, 10, ...
  case -2: // ... -5, -2
    something;
    break;
  case 2: // 2, 5, 8, 11, ...
  case -1: // ... -4, -1
    something;
    break;
}  

请参阅remaindermodulus operation

PS在Common Lisp中你会使用mod

(ecase (mod x 3)
  (0 ...)
  (1 ...)
  (2 ...))