一个桶里面有10条鱼 有10个桶 每个桶一次捞鱼数量为0-10
问捞够90条鱼的有几种可能?用c#编程实现!

解决方案 »

  1.   

    穷举法吧- -!可以把10桶鱼看成10×10的二维数组a[9][9],有鱼的为1,没鱼的为0,0的个数在数组中为10,1的个数为90,然后a[0][0]=0,a[0][1]=0,...每次赋值是都计算一下0和1的个数,当0的个数为10或1的个数为90就是一种,好像很麻烦,或许用哈希表能简单点,我不会
    备注:新手,写错了的话,不带骂人的啊
      

  2.   

    {
    y:一共几个桶
    z: 一共几条鱼
    }
    function TMainForm.P(y,z:integer):integer;
    var
      i : integer;
    begin
     if (y <= 1) or (z = 0) then
       result := 1
     else
       for i := 0 to z do
         result := result + P(y - 1, z - i);
    end;
    手头没有.NET工具,怕记事本写的语法有问题。
    这个是delphi版本的
      

  3.   

    每次从每个桶里取鱼,第一个桶 A条 第二个桶 B条 第三个桶 C条。。第10个桶 J 条。就是说90=A+B+C+D+E+F+G+H+I+J,有多少种组合方式,如果要打印出来的 确实多
    高中数学中的排列组合 呵呵
      

  4.   

        class Program
        {
            static void Main(string[] args)
            {
                Fish(10, 0);
                Console.WriteLine(count);
            }        static int count = 0;        static void Fish(int bucket, int result)
            {
                for (int i = 10; i >= 0; --i)
                {
                    if (bucket == 1)
                    {
                        if (result + i == 90)
                        {
                            ++count;
                        }
                    }
                    else
                    {
                        Fish(bucket - 1, result + i);
                    }
                }
            }
        }要运行10^10次,计算时间很长,打印结果是92378,比预想的小,可能不正确。