問題描述:寫一個程式,用字典順序把一個集合的所有子集找出來。
此題的思路來自《C語言名題精選百則技巧篇》:字典順序,也就是字元串比較時的順序規則。可以采取這樣的思路(以下是我根據書上的思路進行歸納再加上我自己的了解得來的步驟):
先定義n是集合的個數并且集合是已經從小到大排好順序的{1,2,3....n}的集合。集合從{1}開始(此時下标index=0),
1.當state[i]<n時,就向右進行擴充,将state[2]=2;接着将state[3]=3;
2.當state[index]==n時,就不能向右邊進行擴充了,此時就需要向左邊處理了。此時的集合是{1,2,3,....,n-2,n-1,n},那麼,要找比這個集合剛好大一點的,就是{1,2,3,....n-2,n},是以就可以歸納出規則為:将index減1并且将state[index]加1。
3.如果state[0]==n,那麼循環就結束,反之則重複第1,2步,直到state[0]==n。
代碼如下:
本文轉自NeilHappy 51CTO部落格,原文連結:http://blog.51cto.com/neilhappy/1118293,如需轉載請自行聯系原作者