放苹果问题

问题描述

小蒜想知道把 MM 个同样的苹果放在 NN 个同样的盘子里,允许有的盘子空着不放,共有多少种不同的分法?(用 KK 表示)55,11,11 和 11,55,11 是同一种分法。

输入 

第一行是测试数据的数目 t(0 \le t \le 20)t(0≤t≤20)。

以下每行均包含两个整数 MM 和 NN,以空格分开。1 \le M, N \le 101≤M,N≤10。

输出 

对输入的每组数据 MM 和 NN,用一行输出相应的 KK。

Sample 1

InputcopyOutputcopy
1
7 3
8

解题思路 :递归   m是苹果,n是盘子

(1)m==0||m==1||n==1

苹果没有或者苹果只有一个时或者盘子只有一个时,只有一种放法;

后面的需要依次递归,直到满足该出口条件时递归回来;

(2)当苹果数小于盘子数

apple(m,m),m个苹果放m个盘子;

(3)当苹果数大于盘子数

所有盘子都放一个苹果 apple(m-n,n)

只有一个盘子不放  apple(m,n-1);

代码如下

#include<stdio.h> 

int apple (int m,int n)
{
	if(m==0||m==1||n==1)
	return 1;
	if(m<n)
	return apple(m,m);
	else
	return apple(m-n,n)+apple(m,n-1);
 } 
int main(void)
{
	int n,m,t;
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
	   scanf("%d%d",&m,&n);
	   printf("%d\n",apple(m,n));
    }
	return 0;
}
 
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易哈哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值