1 条题解

  • 0
    @ 2026-3-28 14:37:05

    C++ :

    #include <stdio.h>
    #include <stdlib.h>
    
    int f(int p,int q);  //这里f就是递归求在q个框子里放p个苹果的方法总数的
    int main(){
            int m,n,i;
            scanf("%d",&i);
            while (i--){
                  scanf("%d%d",&m,&n);
                  printf("%d\n",f(m,n));      
            }
        return 0;
    }
    //递归函数的思想是,在n个盘子里放m个苹果,允许有盘子空,按层次可以划分成如下的子问题:1》在n个盘子中不空的放。显然此时方法种数相当于在n个盘子里面放(m - n)个苹果2》n个盘子中至少有一个空,即盘子规模小1的子问题。
    int f(int p, int q){
        int z;
        if(p == 0|| q == 1) z = 1; //这里是两个递归结束条件,既递归的出口;要么就是所有的苹果 //放到一个盘子里,要么就是没有苹果了(这种结果的产生如下)
             else{
                  if(p < q) z = f(p,p); //盘子数大于苹果数,那么就相当于在p个盘子 //里放p个苹果。
                       else z = f(p-q,q)+ f(p,q-1); //总问题和子问题
             }
        return z;
    }
    

    信息

    ID
    1840
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者