这一题很明显是一个递归,我们先分析一下:
1.若租的冰鞋数量大于还的冰鞋数量,则无法分配方案会出现无冰鞋可租的现象。
2.若没有租冰鞋的,只有还冰鞋的,则只有一种方案。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)。
3.若租的冰鞋数量小于等于还的冰鞋数量,则可以采取两种方案,先还冰鞋和先租冰鞋。若先还一双冰鞋,下一次又可以分为先还冰鞋和先租冰鞋两种情况,如此就可以看出递归的核心了:fun(x-1,y)+fun(x,y-1)。
代码如下:
#include<iostream>
using namespace std;
int fun(int x,int y){
if(x<y) return 0;
if(0==y) return 1;
return fun(x-1,y)+fun(x,y-1);
}
int main(){
int m,n;
cin>>m>>n;
int sum=fun(m,n);
cout<<sum;
}