【数学】组合趣题1-22 小兔吃萝卜

上海小升初
上海小升初 这家伙很懒,还没有设置简介

0 人点赞了该文章 · 111 浏览




题目来源:小蓝本周建新编著的《组合趣题》第1章计数问例22。

题目描述:小兔有n根萝卜,它每天至少要吃一棵,则当萝卜吃完时,不同的吃萝卜的情形有多少种?(1<=n<=64)

测试用例:输入 12, 输出2048

解题思路:(解法1)我们假设小兔有n根萝卜时,不同的吃萝卜的情形有F(n)种。我们先想一下当n=3时,F(3)怎么求?有以下几种吃法如下,

第1天吃的根数剩余萝卜的吃法
1F(2)
2F(1)
3F(0)

1天吃了1根萝卜的情况下,问题变成了剩2根萝卜时,有多少种情形?这样就把问题分成3类,每一类都是一个子问题,可以用递归方法解决。根据加法原理,F(3)=F(2)+F(1)+F(0)。所以F(n)就可以分成n类,F(n)=F(n-1)+F(n-2)+……+F(0)。初始化条件F(0)=1, F(1)=1。

代码实现:

#includeusing namespace std;typedef unsigned long long ull;int main(){  ull n, a[69]={1,1};  cin>>n;  for(int i=2;i<=n;i++){    for(int j=0;j      a[i]+=a[j];    }  }  cout<  return 0;}

(解法2)筷子法,这个解法来自于书上,思路很好,记录下来。

将n棵萝卜一字排开,编号为1到n号,小兔吃萝卜从1号开始依次吃,若某天最后吃完的是第k棵萝卜,则在第k棵萝卜后放一根筷子(其中1<=k<=n-1)。实际上就是用筷子把萝卜分成若干摊,每天依次吃其中一摊。于是问题转换为在n-1个位置上放筷子(每个位置至多放一根筷子),有多少种放法?而每个位置,可以放筷子,也可以不放筷子,根据乘法原理知,不同的放筷子的方法有2^(n-1)种。




发布于 2024-04-23 10:56

免责声明:

本文由 上海小升初 原创发布于 家长帮 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

广告
All Rights Reserved Powered BY WeCenter V4.1.0 © 2025 京ICP备20005761号-2