写算法的时候的心态。

来源:互联网 发布:淘宝买家延期收货 编辑:程序博客网 时间:2024/05/01 18:42

    刚刚在CSDN上看到的一个提问的题目:

    x年出生的母牛从第x+m年开始到第x+n年止(含, 1 < m < n)每年生小母牛一头,并在第x+p(p > n)年被淘汰。设第x年有刚出生的小母牛一头,求第x+k(k > 0)年存栏母牛多少头。
 
【输入形式】
 
从标准输入上顺序读入正整数m、n、p、k。
 
【输出形式】
 
以整数方式在标准输出上输出第k年的母牛存栏数s。

 

   这是我喜欢的题目类型。在研究了一会之后,我开始想的解决方法是:

   将3种情况分别处理,1,生育,2,不育,3,死亡。

   用三个函数相加,最后得出其结果。处理顺序为:

    1,先假设没有不育和死亡,在无损生育条件下,牛的增长情况。得出的答案为a[k]=a[k-1]+a[k-m];
    2,加入不育条件。

         我考虑的一个不育的牛,在以后依然会不育,而在无不育的情况下,我们会把这头不育牛和她的子孙一起算在内。所以,我用

         b[k]=b[k-1]+a[k-n]

        b[k-1]为昨日不育牛(今日依然会不育。)a[k-n]为在k这一天,新出现的不育牛。

        这个答案是错误的,其中其中原因很多,比如a[k-n]那天产生的不孕牛,只能说明在k+1天后,我计算的结果因为减少k。而跟第k天无关。

        最后,根据已经有的数据分析:

        如果想用这两个步骤得到一个正确的答案,那么

        b的递归关系应该为: b[k]=b[k-1]+a[k-n+m]-1  (这个1估计是开始的牛的数量)

        

     3,再加入死亡条件。

   

   这中间有很多牵扯我没弄清楚。所以,这种思路 即便能够得到一个正确的答案,我也无法理清思绪 。而在中间考虑的过程中 ,我开始甚至把第二项写成了b[k-n];在得知这项应该为a的项的时候,我俨然欣喜,以为找到了正确的答案 。

       还是和以前一样。毛躁,不细心。

 

    

     最后写了一段代码出来,自己花了很多时间修改一些细节~,期间有一个朋友告诉我说,全局变量用起来容易出现错误。我说,我管不了啦。~(第一次在代码中使用全局变量)

      如今我也不想管这么多。

    毕竟在这个地方,全局变量让我能够更好的解决这个问题。

 

     突然觉得自己很无聊,这么晚了,花几个小时研究这么一个问题。说白了这就是一个智力题,和C++算法都没多大关系。

    感觉自己很无用,思路算法并不难,可我缺花了这么多的时间。

    心理很害怕。感到恐惧。不知道的东西太多,懂得的东西太少。

原创粉丝点击