为考试而学习我已经为手动计算提供了大量代码。这个问题它把我扔了一个循环。
public static int[] mystery(int x) {
int[] result = new int[x / 2];
for (int i = 0; i < x/2; i++) {
result[i] = (i * i) % x;
}
return result;
}
有:
mystery(5)
mystery(10)
我计算的mystery(5)
为[0,1],mystery(10)
为[0,1,4,4,1];但是,我认为那些答案不正确。
答案 0 :(得分:1)
您对mystery(5)
的回答是正确的。
mystery(10)
的数组应包含[0,1,4,9,6]
,因为在这种情况下您计算square numbers mod 10
。
在我看来,没有什么策略可以更快地获得结果。这都是关于阅读代码的经验。
我为这个特定答案采取的步骤基本上是
for(int i = 0; i < 5; i++)
=&gt;所以i
从 0 变为 4 result[i] = (i*i)%10;
i
方数mod 10进入索引i
[0,1,4,9,6]
答案 1 :(得分:0)
阅读此方法时应注意的关键是循环的迭代与数据流无关;可以单独分析迭代i
的影响,而无需知道在任何其他迭代中发生的情况。
因此,您只需要考虑一个事实: result i = i 2 mod x 。然后你可以忘记代码并进行数学运算。
其中 x = 10 :