1.2 中國象棋將帥問題
阿新 • • 發佈:2020-11-17
1.2 中國象棋將帥問題
請寫出一個程式,輸出A,B所有合法的位置,要求在程式碼中只使用一個變數。
位運算:採用一個8bit位,左邊4bit,代表A的位置,右邊4bit,代表B的位置,然後每次都去更新bit位即可。
class Test{ public static void main(String[] args) { for (int i = 0x10; i < 0x90; i += 0x10) for (i= (i & 0xF0) | (i >> 4); (++i & 0xF) < 10; ) if (((i & 0xF) - (i >> 4)) != 3 && ((i & 0xF) - (i >> 4)) != 6) { System.out.println(String.format("A= %d , B =%d" , (i>>4),(i&0xF))); System.out.println(String.format("A= %d , B =%d" , (i&0xF),(i>>4))); } } }
利用數學
先看基本思路:
遍歷A的位置
遍歷B的位置
判斷A,B是否滿足條件
如果滿足,print
對於任何一個數字\(x\) ,都可以重構成為\(x = x/y * y+ x %y\),然後下述程式碼中的\(i/9\)相當於內迴圈,\(i\%9\)相當於外迴圈,因為i的最大值是81,所以迴圈的範圍就在0-8之間,然後我們列印的時候額外+1即可。真他孃的精妙。
class Test{ public static void main(String[] args) { byte i = 81; while(i-- > 0){ if(i/9%3 == i%9%3) continue; System.out.println(String.format("A = %d ,B = %d",i/9+1,i%9+1)); } } }