除法
輸入正整數n,按從小到大的順序輸出所有形如 abcde/fghij=n的表達式,其中a~j恰好為數字0~9的一個排列,2<=n<=79。
樣例輸入:
62
樣例輸出:
79546/01283=62
94736/01528=62
如何解決這個問題?
2010-7-16更新
上面的問題讓我一下子想到了如何求一個序列的全排列的問題,于是順著這個思路摸索了一下。Google到了一個算法。
遞歸
例說明如何編寫全排列的遞歸算法。
1、首先看最后兩個數4, 5。 它們的全排列為4 5和5 4, 即以4開頭的5的全排列和以5開頭的4的全排列。由于一個數的全排列就是其本身,從而得到以上結果。
2、再看后三個數3, 4, 5。它們的全排列為3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六組數。
即以3開頭的和4,5的全排列的組合、以4開頭的和3,5的全排列的組合和以5開頭的和3,4的全排列的組合.
從而可以推斷,設一組數p = {r1, r2, r3, ... ,rn}, 全排列為perm(p),pn = p - {rn}。
因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。當n = 1時perm(p} = r1。
為了更容易理解,將整組數中的所有的數分別與第一個數交換,這樣就總是在處理后n-1個數的全排列。