程式設計之美 中國象棋將帥問題

2021-06-25 19:25:08 字數 909 閱讀 8409

首先,我們歸納總結一下展開原理,

對於 a*b = i ,我們可以用如下公式展開

loop1=i%b;

loop2=(i/b)%a 

其中loop1是內層迴圈,loop2是外層迴圈

那麼如果 a 本身就是 k*j 組成的呢?

由於 k*j = i/b  ,套用公式得到

loop1= (i/b)%j

loop2= ((i/b)/j)%k 

由此可以得出n重時的公式,假設 an * a(n-1) * ....... * a3 * a2 * a1 =  n

loop1=n%a1

loop2=(n/(a1))%a2

loop3=(n/(a1a2))%a3

.....

loopn=(n/(a1.....an))%an

則對於給定的 an * a(n-1) * ....... * a3 * a2 * a1 =  n ,展開式是 ( nzk 意思是n的展開 )

nzk =  (n/(a1.....an))%an +  " ,  "+  .....  (n/(a1a2))%a3 + " , " +  (n/(a1))%a2 + " , " +  n%a1

得出nzk  =((n/(a1.....an))%an +  " ,  "+  .....  (n/(a1a2))%a3 + " , " +  (n/(a1))%a2 )+ " , " +  n%a1

得出nzk =   (an * a(n-1) * ....... * a3 * a2)zk    +  " , " +  n%a1

得出nzk =  (n/a1)zk  +  " , " +  n%a1

至此得出了遞迴公式,

n的展開式 = (n/(n的最後乙個因數)) 的展開式 +  ( n 模(n的最後乙個因數))

《程式設計之美》 中國象棋將帥問題

即將面臨找工作,最近在看 程式設計之美 這本書。自己能力有限所以覺得有些題目難度不小,但仍覺受益匪淺,有時間一定再讀幾遍。下面是關於 中國象棋將帥問題 的一些心得 書中給出的演算法的精妙之處這裡不再贅述,給出自己的想法 原理與書中給出演算法相同,通過迴圈實現。對其中的任意乙個位置k,其餘8個位置都可...

程式設計之美 中國象棋將帥問題

程式設計之美1.2,題目不再重複了,這裡主要研究方法二。核心思想就是兩重迴圈分別從1到9,如果兩個變數處於同一直線則跳過,不然就列印出兩個變數。題目的要求在於只能用乙個位元組來儲存,所以就需要空間上進行巧妙的變換。兩個變數從1到9,其實只有9 9 81種狀態,理論上乙個位元組儲存已經綽綽有餘了。題中...

程式設計之美 中國象棋將帥問題

a表示 將 b表示 帥 用1 9表示a b的座標。請寫出乙個程式,輸出a b所有合法位置。要求在 中只能使用乙個位元組儲存變數。用乙個unsigned char型別變數儲存a b的位置,前4bit表示a的位置,後4bit表示b的位置。include define half bits length 4...