在qszhoufuge
那裡看到「乙個集合的演算法問題」題目如下:
設計演算法以求解從集合中選取k(k<=n)個元素的所有組合。例如,從集合中選取2個元素的所有組合的輸出結果為:1 2,1 3,1 4,2 3, 2 4,3 4。
早上在家的時候隨手寫了乙個用迴圈解決的,因為沒環境測試,下午有時間的時候測試發現錯了,哈哈。非常抱歉啊。
後來一想,其實這個不難,用遞迴可以很好解決,於是乎就靜下心來思考,其實用遞迴實現真的不複雜,這次終於一次性通過了,^_^
實現演算法如下(經過測試的):
#include
//顯示組合
//ncount:組合的個數
//p:陣列指標
inline void p2s(int ncount,int *p)
//遞迴組合
//nstart 開始數
//nmax: 最大數值
//ncount:組合的個數
//nindex:組合索引(組合中的第幾個數,0開始)
//p:陣列指標
void func0(int nstart,int nmax,int ncount,int nindex,int * p)
else} }
//組合演算法
//n:範圍:1~n
//ncount:組合的個數
void func(int n,int k)
int _tmain(int argc, _tchar* argv)
乙個sql問題的解決
表內容 2005 05 09 勝 2005 05 09 勝 2005 05 09 負 2005 05 09 負 2005 05 10 勝 2005 05 10 負 2005 05 10 負 輸出 比賽時間 勝 負 2005 05 09 2 2 2005 05 10 1 2 自己完成建表語句,插入語句...
輸出乙個集合的所有子集(演算法)
輸出乙個集合的所有子集 演算法 時間複雜度很顯然,最少也是2 n,空間複雜度,是n,比較簡單 每個元素要麼在子集中,要麼不在,用 j 的二進位制形式的每一位代表陣列a中對應的位置的元素是否在子集中,例如,當i 5時,j i 5,那麼j 0101 我們對應的輸出 a 0 a 2 這個過程在while迴...
乙個演算法問題
今天上午上班由於沒什麼事做,就看看書,發現乙個演算法問題,開始看感覺貌似很簡單,但是越想越有意思。1,題目描述 給定乙個十進位制的正整數n,寫下從1開始到n所有出現 1 的個數。例如 n 2 寫下 1 2 出現了乙個1 n 12,寫下1,2,3,4,5,6,7,8,9,10,11,12.這樣1的個數...