刚刚在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++算法都没多大关系。
感觉自己很无用,思路算法并不难,可我缺花了这么多的时间。
心理很害怕。感到恐惧。不知道的东西太多,懂得的东西太少。