藍橋杯-演算法訓練 未名湖邊的煩惱 (遞迴)
阿新 • • 發佈:2018-12-05
演算法訓練 未名湖邊的煩惱
時間限制:1.0s 記憶體限制:256.0MB
問題描述
每年冬天,北大未名湖上都是滑冰的好地方。北大體育組準備了許多冰鞋,可是人太多了,每天下午收工後,常常一雙冰鞋都不剩。
每天早上,租鞋視窗都會排起長龍,假設有還鞋的m個,有需要租鞋的n個。現在的問題是,這些人有多少種排法,可以避免出現體育組沒有冰鞋可租的尷尬場面。(兩個同樣需求的人(比如都是租鞋或都是還鞋)交換位置是同一種排法) 輸入格式 兩個整數,表示m和n 輸出格式 一個整數,表示隊伍的排法的方案數。 樣例輸入 3 2 樣例輸出 5 資料規模和約定 m,n∈[0,18]
問題分析
每天早上,租鞋視窗都會排起長龍,假設有還鞋的m個,有需要租鞋的n個。現在的問題是,這些人有多少種排法,可以避免出現體育組沒有冰鞋可租的尷尬場面。(兩個同樣需求的人(比如都是租鞋或都是還鞋)交換位置是同一種排法) 輸入格式 兩個整數,表示m和n 輸出格式 一個整數,表示隊伍的排法的方案數。 樣例輸入 3 2 樣例輸出 5 資料規模和約定 m,n∈[0,18]
問題分析
演算法分析:利用遞迴就可以實現,具體看程式碼實現
1 #include<stdio.h> 2 int f(int m, int n) 3 { 4 //當m = 0時,不滿足 5 if(m == 0) return 0; 6 //當n = 0時,只有一種情況 7 if(n == 0) return 1; 8 //當m = 1並且n = 1時只有一種情況 9 if(m == 1 && n == 1) return 1; 10 //當m < n時不滿足 11 if(m < n) return 0;12 //其他情況 13 return f(m-1, n) + f(m, n-1); 14 } 15 int main() 16 { 17 int m, n; 18 scanf("%d%d",&m,&n); 19 printf("%d\n",f(m, n)); 20 return 0; 21 }