放苹果

来源:互联网 发布:java 线程状态 编辑:程序博客网 时间:2024/06/10 12:21

题目:给定n个苹果和m个盘子,问有多少种放苹果的方法,盘子允许为空,T组测试数据。

测试数据:

1

7 3

8

思路:假如m>n,则必有m-n个盘子为空,等价于fun(m,m);

    假如m<=n,假设每个盘子都有一个,则放法等价于fun(m-n,n);

           假设至少有一个盘子是空的,则放法等价于fun(m,n-1);

所以总得放法等价于fun(m,n) = fun(m,n-1)+fun(m-n,n);

代码如下:

#include<stdio.h>int fun(int m,int n) {    if(m==0||n==1)         return 1;     if(n>m)        return fun(m,m);    else        return fun(m,n-1)+fun(m-n,n);}int main(){    int T,m,n;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&m,&n);        printf("%d\n",fun(m,n));    }}