小猴程式設計演算法二階段-上課筆記
阿新 • • 發佈:2020-07-13
第三講
重點題:
1、123好數
a[i]裡存的是數字的第i位是1, 2還是3
t存的是每個數的第p位和第p-1位都是什麼數字(當做兩位數來判斷)
如果是12,23或者31,說明不能不是123好數
void search(int p){//列舉a[i] if(p > n){ cnt++; if(cnt == k){ for(int i = 1;i <= n;i++){ cout << a[i]; } cout << endl; }return; } for(a[p] = 1;a[p] < 4;a[p]++){ int t = a[p-1]*10 + a[p]; if(t == 12 || t == 23 || t == 31){ continue; } search(p+1); } }
2、d好數
前一個數和後一個數的絕對值不能超過d才能稱為d好數
void search(int p){//列舉a[i] if(p > n){ cnt++; return; }for(int i = 1;i <= m;i++){ int t = a[p] - a[p-1]; if(abs(t) > d && p != 1){ continue; } search(p+1); } }
3、組合列舉
給出1~n,n個數中選出m個數
例如:
1 2
1 3
1 4
2 3
2 4
3 4
a[i]存的是每個數
如果已經遞迴到n了,輸出
如果還沒到n,也還沒選m個數呢,我可以選一個數(從x開始),繼續遞迴,我已經選的數+1,我選到幾了+1
voidpick(int x,int y){ if(y == n){ for(int i = 0;i < n;i++){ cout << a[i] << ' '; } cout << endl; return; } for(int i = x;i <= m;i++){ a[y] = i; pick(i+1,y+1); } }