NTES 2012 列印字母序列

2022-09-10 15:03:20 字數 1358 閱讀 3778

列印以下序列:

(a),(b),(c),(d),(e)........(z)

(a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)

(a,b,c),(a,b,d)....(a,b,z),(a,c,d)....(x,y,z)

....

(a,b,c,d,.....x,y,z)

思路一:每個集合可以看做乙個數,根據字母是26進製的特性,生成所有數(去掉一些),再排序輸出。但最大的數可以到達26^26,複雜度太大。且不知如何實現。

思路二:用到排列組合的思想,用遞迴代替26重迴圈。

view code

1 #include

2using

namespace std;

3#define len 6

4int buf[len];

5bool flag = false;67

void show(int len)

8 17 cout<

18if(flag)cout<

19else cout<20 }

21void gene(int first,int deepth,int index) //

列印首字母為'a'+first,長度為deppth的所有集合,這樣的集合有多少個?

2228

for(int i=first+1; i//

其實就是遞迴列印首字每加1,長度減1的所有集合

29 gene(i,deepth-1,index+1);

30 }

31void solve()

32 42 }

43 }

44int main()

45

迭代的是人,遞迴的是神。

這個題目我想了兩天,遞迴關鍵是要理解其思想,洞穿其過程。

接下來要加強遞迴的題目的訓練。

精簡版,方便閱讀。感謝神一樣的男人,陽神!

view code

1 #include 

2 #include

3 #include 45

#define len 6

6int buf[len];78

void show(int ind)

9 15

void gene(int first, int len, int ind) //

從'a'+first開始生成長度為len的序列,當前生成字母儲存在buf[ind]

1624

void solve()

25 32 }

33int main()

34

物件導向部分 201

小夥伴們,還在為不知道怎麼下手而頭疼嗎,我們程式競賽協會來幫你們啦 啦啦啦。另外,如果有對程式設計含有濃厚興趣的同學,我們隨時歡迎你們的加入喲 策劃 譚兆飛 程式設計 管懷文 協助 一號人員要求給她打碼 乾脆二號也打碼好了o o 其實只是提供了題目啦 物件導向部分 201 include inclu...

2 01揹包問題

有 nn 件物品和乙個容量是 vv 的揹包。每件物品只能使用一次。第 ii 件物品的體積是 vivi,價值是 wiwi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,vn,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n...

2 01揹包問題

有 nn 件物品和乙個容量是 vv 的揹包。每件物品只能使用一次。第 ii 件物品的體積是 vivi,價值是 wiwi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。第一行兩個整數,n,vn,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 nn 行,每...