12-分苹果(递归)

Description

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

Input

第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

Output

对输入的每组数据M和N,用一行输出相应的K。

Sample Input

1
7 3

Sample Output

8#include <iostream>using namespace std;

int f(int n, int m){    if(n < m)           //苹果少于盘子时,相当余,将多的盘子放一边不管,反正用不上,        return f(n, n);        //相当于将n个苹果放到n个盘子中随意放有多少种     if(n == 0)        return 1;       //没有苹果就都空,所以一种     if(m == 0)        return 0;      //有苹果无盘子放,方法放,    return f(n, m-1) + f(n-m, m); //前一半是保证至少有一个空(先空一个,然后去放入m-1个盘子),                                   //后一半是保证都非空,先一个盘子放一个(肯定非空了),再去将生的n-m个苹果放在任意盘子上 }

int main(){    int n, m, c;    cin >> c;    while(c--){            cin >> n >> m;        cout << f(n, m) << endl;    }    return 0;}
时间: 2024-10-21 12:53:14

12-分苹果(递归)的相关文章

华为机试测试-分苹果-递归

import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int m=scanner.nextInt(); int n=scanner.nextInt(); System.out.println(sharingApple(m, n)); scanner.close(); } public static in

分苹果

题目: 穷举法:由于3 1 1和1 3 1 是一种分法,所以也就是说在N个篮子里的苹果数目是 n1<=n2<=......<=nn.所以只要进行N次循环,假设上层循环标量是i,则下层循环时j=i. 由于事先N,即篮子的数目是不确定的,所以只能使用递归来确定循环层数. 1 #include<iostream> 2 using namespace std; 3 int count; 4 int foo(int n,int m,int prei,int temp[10]) 5 {

C语言 &#183; 分苹果

算法提高 分苹果 时间限制:1.0s   内存限制:256.0MB 问题描述 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1..N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹果. 输入格式 第一行两个整数N.M,表示小朋友个数和老师个数. 接下来M行,每行三个整数Li.Ri.Ci,意义如题目表述. 输出格式 一行N个数,第i个数表示第i个小朋友手上的水果. 样例输入 5 31 2 12 3 22 5

COJN 0583 800602分苹果

800602分苹果 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 第一行是测试数据的数目t,以下每行均包含二个整数M和N,以空格分开. 输出 对输入的每组数据M和N,用一行输出相应的K. 输入示例 17 3 输出示例 8 其他说明 数据范围:0<=t<=20,1<=M,N&l

[华为机试真题]70.分苹果

题目 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放. 1<=M<=10,1<=N<=10 例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法 输入 7 3 输出 8 思路 设f(m,n) 为m个苹果,n个盘子的放法数目: 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响.即if(n>m) f(m,n) = f(m,m) 当n<=m:不同的放法可以分成两类: (1)有至少一个盘子空着,即相当于f(m,n) = f(m

熊分苹果的问题

今天参加笔试,遇见一道编程题,给定一个1~9的整数N代表熊的数目,每只熊按照如下方式分苹果:先将苹果平均分为N份,再扔掉一个.要求输出最少的苹果总数? 思路1:逐层向下,设总数为X,则第一次每一份为(X-1)/N个苹果,第二次为((N-1)*((X-1)/N)-1)/N,依次类推.......,发现到最后由于嵌套的层数过多,已经被弄晕了,果断换方法. 思路2:(采取补苹果的方法)由题描述,因为要扔一个苹果,所以扔一个苹果==补N-1个苹果,因此第一个熊得到的苹果数为(X+N-1)/N,第二个熊得

蓝桥杯 算法训练 ALGO-121 猴子分苹果

算法训练 猴子分苹果 时间限制:1.0s   内存限制:256.0MB 问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分.这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果.第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起.这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果.第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个.问,原来这些猴子至少采了多少个苹果. 输入格式 两个整数

郑州一晚上查处11辆问题渣土车 遮挡号牌被扣12分

执法队员们随后改变策略,东.西联合执法小组被分成3个队伍,分头行动,摆脱豪车们的追踪.摆脱后果然奏效.当晚行动共查处11辆问题渣土车. 三日内拿不出证件,视为无证 昨日2点29分,长江路客技路交叉口,执法人员拦下一辆车牌为豫AU9525的渣土车,检查时发现车上没有携带相关手续,将车辆暂扣. 按规定,车主可在三日内到市城管局接受处理,如三日内拿不出相关证件,视为无证进行处罚. 超载渣土车高架桥上被查 0点40分,航海路西三环交叉口高架桥上,遗撒好多碎水泥块.渣土,长10多米.执法队员在附近100米

算法历练之路——分苹果

分苹果 时间限制: 1Sec 内存限制: 128MB 提交: 231 解决: 69 题目描述小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1..N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹果. 数据规模和约定 100%的数据,N.M≤100 000,1≤Li≤Ri≤N,0≤Ci≤100. 输入第一行两个整数N.M,表示小朋友个数和老师个数. 接下来M行,每行三个整数Li.Ri.Ci,意义如题目表述.输

poj1664-放苹果(递归)

一,题意: M个苹果放在N个盘子里,允许有盘子空着,问共有多少种不同的分法. 二,思路: 递归的思想求解: 1,有反复执行的过程(调用本身) 第一种情况n>m : 必定有 n-m 个盘子空着,去掉不影响. 第二种情况n<=m : i,有至少一个盘子空着; ii,每个盘子都有苹果; 总的放苹果的方法数为两者之和: 2,有跳出反复执行过程的条件(递归出口) 当苹果放完或者只有一个盘子的时候 *递归两条路: i,n会逐渐减少,最终到达出口 n==1 : ii,m逐渐减少,因为n>m时,retu