1

我有一个 int 数组,其中包含 4 个按升序排序的数字。

我想知道这些数字是否符合这条规则:

1, 2, 3, 4 or
5, 6, 7, 8 or
9, 10, 11, 12 or
13, 14, 15, 16
etc.

他们不能

2, 3, 4, 5 or
4, 5, 6, 7 or
23, 24, 25, 26
etc

所以它们必须按顺序排列,但只能在这 4 组中!

我尝试将所有数字相加(例如 1+2+3+4)并以 12 为模求和,结果始终为 10、2、6、10、2、6 等。我的想法是检查结果是否是这三个数字 2、6 或 10 之一。

但它不能工作,因为例如 (17+18+19+20)%12 是 2 这是合法的,但例如 (2+3+4+5)%12 也是 2 但它不合法所以它会是错误的结果。

4

4 回答 4

6

让数字成为

a, a+1, a+2, a+3

规则是

a % 4 == 1    // is the same as:  a & 3 == 1
于 2013-01-18T22:07:34.853 回答
3

如果我清楚地理解了您的问题,那么您只需要检查序列中的最后一个数字是否可以被 4 整除。如果它可以被 4 整除,则它是一个有效序列。

所以,如果你的序列是: - a1, a2, a3, a4. 检查这个条件: -

a4 % 4 == 0

如果上述条件为真,那么你有一个有效的序列。

于 2013-01-18T22:07:42.207 回答
3

说你的数组的第一个数字是x 然后x4必须等于1

if (a[0]%4 == 1)
  return true;
else 
  return false;

或者,如果
a[1] % 4 == 2

或者

a[2] % 4 == 3

或者

a[3] % 4 == 0
于 2013-01-18T22:08:28.410 回答
2

我能看到的最简单的规则是;

array[3] % 4 == 0

也就是说,数组中的最后一个元素除以 4。这将是一个简单的解决方案。

于 2013-01-18T22:07:35.590 回答