把M个苹果放到N个盒子有多少种放法。。盒子可空,算组合,3 3 7 和7 3 3和3 7 3都是一种。
不好意思,新人没分。。

解决方案 »

  1.   

      m
    n    种方法。
    拿一个苹果出来随机放个盒子,有N种方法;
    再拿一个苹果出来随机放个盒子,有N种方法;
    ..........
    N*N*N*.....
      

  2.   

    ......
    不知道以后不上学了
    这些题会不会也不会做了用*代表苹果吧
    比如说5个苹果放3个盒子里
    *****
    在其中我加2个板就能把苹果分成三份
    *****||
    让这7个东西随便排列7!
    其中苹果位置互换无所谓,板位置互换无所谓
    所以为7!/5!/2!
    你的题同理就是(M+N-1)!/M!/(N-1)!也可以想简单一点
    一共有M+N-1个东西
    从中挑出N-1个板子
      

  3.   

    这里有个相似的问题。
    递归法求解排列组合的一个题目(pku 苹果盒子题目)2007-03-04 19:37/*******pku放置苹果问题的小程序******/
    /*******作者:xiaocui **************/
    /*******时间: 2007.3.4**************/
    /*******版本: v1.0 *****************//****问题描述:
     ****
     放苹果 
     Time Limit:1000MS  Memory Limit:10000K 
     Total Submit:4861 Accepted:3034  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 
     
     解决思路,可以利用递归的方法,也可以利用组合数学里面的栅格法进行解决。本程序利用
     递归方法来解决此问题。把m个苹果放到n个盒子里,结果不相交的分为2种情况:(1)没有盒子
     空;(2)有盒子空。 盒子的空是一步一步确定的,空盒的个数也只能到最后完毕才能确定。 所以, 设递归函数为f,则有递归表达式:  f(m,n) = f(m-n, n) +f(m,n-1);
      f(m-n,n)表示首先给n个盒子各方一个苹果,然后再把剩余的m-n和苹果房间n个盒子里;
      f(m,n-1)表示一个盒子为空,把m个苹果放到n-1个盒子里去。  如果,苹果数等于0了,或者盒子数等于1了,这2种情况的方法都是1种,这就是递归的出口(结束条件).  f(m,n)=f(m,m)(m<n时,m个苹果最多需要m个盒子,一个盒子放1个,多余的盒子根本用不上)。
      
      **********************************************************************************/#include <iostream>
    using namespace std;/*****放置苹果的递归函数*****
     *****递推式为:
          f(m,n) = f(m-n,n) + f(m,n-1);  m>n
       f(m,n) = f(m,m);               m<n
       f(0,n) = 1;                    m=0
       f(m,1) = 1;                    n=1
     ********/
    int  f( int m, int n )
    {
     //递归出口,没有苹果或者盒子剩下1个
     if ( m==0 || n == 1 )
     {
      return 1;
     } //苹果树多于盒子数
     if ( m >= n )
     {
      return f(m-n, n)+f(m, n-1);
     }
     else  //苹果树少于盒子数,只需要相同的盒子数就足够了
     {
      return f(m, m);
     }
    }int main()
    {
     cout <<"请输入苹果数目: ";
     int  apple_count;
     cin >> apple_count;
     
     cout <<"请输入盒子数目: ";
     int box_count;
     cin >> box_count; cout <<"把这些苹果房间这些盒子,不重复的放置方法有: "<<f(apple_count, box_count)<<endl; return 0; 
      

  4.   

    很明显
     m 
    n    种方法。 
    拿一个苹果出来放到N个盒子,有N种方法; 
    再拿一个苹果出来放到N个盒子,有N*N种方法; 
    .......... 
    N*N*N*.....
    晕死,这种题目还用讨论吗?