手动代码计算

时间:2014-11-05 00:02:16

标签: java arrays loops

为考试而学习我已经为手动计算提供了大量代码。这个问题它把我扔了一个循环。

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];但是,我认为那些答案正确。

  • 在讨论这些问题时,有哪些策略可以帮助我更快地找到答案?
  • 另外,如果你得出答案,那么你为达到答案所采取的步骤是什么?

2 个答案:

答案 0 :(得分:1)

您对mystery(5)的回答是正确的。
mystery(10)的数组应包含[0,1,4,9,6],因为在这种情况下您计算square numbers mod 10

在我看来,没有什么策略可以更快地获得结果。这都是关于阅读代码的经验。

我为这个特定答案采取的步骤基本上是

  • 查看参数(x = 10)
  • 查看参数出现的位置并将其插入
  • 逐步完成代码
  • 看第一行 - &gt; int division - &gt;数组的大小 5
  • 查看循环,插入参数并使用具体数字 - &gt; for(int i = 0; i < 5; i++) =&gt;所以i 0 变为 4
  • 查看表达式并确定哪些值正在改变以及哪些值已修复 - &gt; result[i] = (i*i)%10;
  • 想想,循环做什么=&gt; i方数mod 10进入索引i
  • 的数组
  • 因此结果应为[0,1,4,9,6]

答案 1 :(得分:0)

阅读此方法时应注意的关键是循环的迭代与数据流无关;可以单独分析迭代i的影响,而无需知道在任何其他迭代中发生的情况。

因此,您只需要考虑一个事实: result i = i 2 mod x 。然后你可以忘记代码并进行数学运算。

其中 x = 10

  • 结果 0 = 0 2 mod 10 = 0
  • 结果 1 = 1 2 mod 10 = 1
  • 结果 2 = 2 2 mod 10 = 4
  • 结果 3 = 3 2 mod 10 = 9
  • 结果 4 = 4 2 mod 10 = 6