laifangsong's blog

取长补短,精益求精。 (打个广告,想做手机网站和asp/asp.net网站的可以跟我联系.QQ:25313644)
posts - 51, comments - 185, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

在csdn上看到奶牛问题,写了下算法

Posted on 2007-08-07 12:09 laifangsong 阅读(281) 评论(6)  编辑 收藏 所属分类: 算法

在csdn数据结构看到个热门帖子,奶牛问题:
一只刚出生的小牛,4年后生一只小牛,以后每年生一只。
现有一只刚出生的小牛,问20年后共有牛多少只?

我算出来的是345只,跟答案一致。

用递归写了下算法,自己感觉挺不好理解的。不知道有没有不用递归的算法,或者递归程序写的比较好理解的。
以下是代码:

        private int StatCount(int year)
        {
            
int bornCount;
            
if(year<4)
            {
                bornCount 
= 1;
            }
            
else
            {
                
int sum = 1;
                
for(int i=4; i<=year; i++)
                {
                    sum 
+= StatCount(i-4);
                }
                bornCount 
= sum;
            }
            
return bornCount;
        }

Feedback

#1楼    回复  引用  查看    

2007-08-07 13:45 by fffly [未注册用户]
可以考虑用多线程写,递归做法只是让奶牛每次只能有一个一个去生,其他的等她生完了再去生而已。

如果是多核CPU,那么奶牛如何知道自己是几岁,今年生了没有。

哈哈,其实简单的问题,要是细细推敲起来,也是非常有意思的。

#2楼    回复  引用  查看    

2007-08-07 14:33 by silent x [未注册用户]
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace Cow
{
class Program
{
static void Main(string[] args)
{
int iYear=0;
new Thread(new Cow().Growth).Start();
while (iYear < 20)
{
iYear++;
Console.WriteLine(iYear.ToString()+" years: "+Cow.iTotal);
Thread.Sleep(1000);

}
Environment.Exit(0);
}
}

class Cow
{
public static int iTotal = 0;
int iAge = 0;
public Cow()
{
iTotal++;
}

public void Growth()
{
while (true)
{
iAge++;
if (iAge >= 4)
{
new Thread(new Cow().Growth).Start();
}
Thread.Sleep(1000);
}
}
}

}

为什么多出来好多??

#3楼    回复  引用  查看    

2007-08-07 15:53 by 周银辉      
我以前做个这题,可以参考这里
http://www.cnblogs.com/zhouyinhui/archive/2006/05/06/392719.html

#4楼    回复  引用  查看    

2007-08-07 15:54 by 周银辉      
楼主的递归算法是很费时间的

#5楼 [楼主]   回复  引用  查看    

2007-08-07 22:00 by laifangsong      
@fffly
对啊,有时候小问题,大学问,呵呵
@silent x
好像蛮长的,我看看;)
@周银辉
确实挺费时间的,我算法较差,非递归真的写不出来,我看看你的算法。

#6楼    回复  引用  查看    

2008-02-18 17:38 by 周先前 [未注册用户]
我用递推一样的做出来了,,代码就只有二三十行,,,当然没有代码没有多优化,不过,,这里数字小,,,做出来就行!!