Java ';对于';循环后跟一个';如果';语句转换为';对于';环
我正在尝试解决一个关于hackerrank的谜题(夏洛克和查询谜题-)。在做了一段时间之后,我开始在互联网上寻找帮助。我在这里发现了一个让我困惑的帖子。看起来他好像改变了这个Java ';对于';循环后跟一个';如果';语句转换为';对于';环,java,if-statement,for-loop,modulo,Java,If Statement,For Loop,Modulo,我正在尝试解决一个关于hackerrank的谜题(夏洛克和查询谜题-)。在做了一段时间之后,我开始在互联网上寻找帮助。我在这里发现了一个让我困惑的帖子。看起来他好像改变了这个 for (int j = 0; j < N; ++j) { if (j % B[i] == 0) ... } for(int j=0;j
for (int j = 0; j < N; ++j) {
if (j % B[i] == 0)
...
}
for(int j=0;j
进入这个
for (int j = B[i] - 1; j < N; j += B[i]) {
...
}
(int j=B[i]-1;j有人能解释一下这两个片段是如何等价的吗?假设
B[i]
是一个整数>=2,那么只有当第二个片段是:
for (int j = 0; j < N; j += B[i]) {
}
(int j=0;jj
将迭代可被B[i]
整除的所有值,这些值正是第一个循环中条件为真的j
的值
如果j
被初始化为B[i]-1
,j%B[i]
从不为0,因此第二个循环与第一个循环不相等。两者不相等
与第二种形式相近的第一种形式的正确等价物是:
for (int j = 0; j < N; j += B[i]) {
...
}
(int j=0;jj
从0变为N,并且仅当j
可被B[i]
除时(无剩余值)选择执行操作。第二种形式得到相同的结果,让j
转到B[i]*0,B[i]*1,B[i]*2…..N
。仔细想想,只有B[i]的倍数可以除以B[i](没有剩余值)