中国象棋,棋盘上只有“将”和“帅”,按照中国象棋中两者不能照面的规则,输出两者所有的合法位置组合,要求在代码中只能使用一个变量。
将象棋里两个老大分别可以走的9个位置编号如下:
1 2 3
4 5 6
7 8 9
书中给出的第一个解法好长,我想到了后面的解法认为不需要这么复杂的实现也暂时没有去看了……以下是我的想法:
编号后很快可以发现每一列的共同点是编号对模3运算的结果是相等的,问题就好解决了,两者的位置编号模3运算结果不等则是合法的位置组合,将其输出即可,否则是不合法的。这样的过程用2层嵌套的循环即可,那么问题就是怎样只使用一个变量实现2层嵌套的循环。
这个题给我的启发主要是这样一个循环的实现,如下:
?
int i = 81; while (i-- != 0) { if (i / 9 % 3 != i % 9 % 3) System.out.println("A=" + (i / 9 + 1) + "\tB=" + (i % 9 + 1)); }? ? ?
用一个int实现了等效于如下的循环:
for (int i = 8; i > 0; i--) { for (int j = 8; j > 0; j--) { if (i % 3 != j % 3) System.out.println("A=" + (i + 1) + "\tB=" + (j + 1)); } }?
?