Skip to content

Latest commit

 

History

History
35 lines (31 loc) · 1.46 KB

C++放苹果问题.md

File metadata and controls

35 lines (31 loc) · 1.46 KB

近期由于课业繁忙,无法发布文章,只能利用周末的时间抓紧学习C++语言。今天下午突然有事,所以下午没办法发布有关算法学习的文章了。望谅解。

周内尽可能发布广度优先搜索的学习、使用。


在这里插入图片描述

//Author:PanDaoxi
#include <iostream>
using namespace std;
int apple(int m,int n){
	if(m<0||n<1) return 0;
	else if(m==0||n==1) return 1;
	else if(m<n) return apple(m,m);
	else return apple(m-n,n)+apple(m,n-1);
}
int main(){
	int n;
	cin>>n;
	while(n){
		int a,b;
		cin>>a>>b;
		cout<<apple(a,b)<<endl;
		n--;
	}
	return 0;
} 

这里分为几种情况:

  • 如果没有苹果,那么有多少个盘子也没用,返回0没有放法
  • 只有一个盘子的话,那么无论有没有苹果,都只有1种放法
  • 如果n大于m,则和m个苹果放在m个盘子里,所以递归传入两个m
  • 如果m大于等于n,则有两种情况:一是都有苹果(n个苹果放在n个盘子中,剩下的m-n个苹果放在n个盘子中),二是有的没有苹果(与至少有1个盘子归为一类,递归传入mn-1),程序设计为apple(m-n,n)+apple(m,n-1)即可