首页 > 试题广场 >

放苹果

[编程题]放苹果
  • 热度指数:12131 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

输入描述:
每行均包含二个整数M和N,以空格分开。1<=M,N<=10。


输出描述:
对输入的每组数据M和N,用一行输出相应的K。
示例1

输入

7 3

输出

8
递归实现
#include<stdio.h>
int main(void){
    
    int m,n;
    while(scanf("%d %d",&m,&n)!=EOF){
        int num=df(m,n);
        printf("%d\n",num);
    }
    return 0;
}

int df(int m,int n){
    if(m<0){
      return 0;  
    }
    
    
    if(m==0||m==1||n==1){
        return 1;
    }
    
    else{
        return df(m,n-1)+df(m-n,n);
    }
}

发表于 2022-03-06 16:53:53 回复(0)
#include <stdio.h>

int main(){
    int m,n;
    while(scanf("%d %d",&m,&n)!=EOF){
        int dp[11][11];//0行与0列记录的是0个盘子或0个苹果的情况
        for(int i=0;i<=10;i++){
            dp[0][i]=1;//0个苹果,i个盘子
            dp[i][1]=1;//i个苹果,1个盘子
        }
        for(int i=1;i<=m;i++){
            for(int j=2;j<=n;j++){
                if(j>i) dp[i][j] = dp[i][i];
                else dp[i][j] = dp[i][j-1]+ dp[i-j][j];
            }
        }
        printf("%d\n",dp[m][n]);
    }
}
发表于 2022-03-05 19:34:44 回复(0)