初次接触这道题,我便想到了原来的写过的斐波拉契数列,便用一个个递推的函数从n一个一个的计算,直到运算出f[n]的值,结果呢,可想而知,不是时间超时,便是堆栈溢出!
后面才知道这种题一定存在一个循环的节点,而你所做的便是通过程序或这自己的计算得到出现循环的位置!下面通过代码解释:
接下来这题也是数列循环节的问题
此题便既可以通过程序寻找循环的节点,亦可以同过数学运算得到循环的节点:
第一种方法:数学运算法
可以发现这是从2开始每隔四个出现一次
于是代码为
注意各大OJ ac的标准不是需要执行题中所给的各个步骤,只需要你在最后的时候得到的结果满足题目的要求就可以了!
接下来是一种较笨的方法,因为题中所给的数据并不算大,只到1000000,所以我们完全可以采取去不打印出它与3取余的结果,再判断输出,代码如下:
可以发现,在需求的数不大的情况下,也是可以保证时间和空间都不超而ac,附上memset函数简介:
同理,该题也可以运用上题的做法,代码如下:
最后附上取余运算常用的公式:
最后希望此文能帮助大家很好的理解数列循环节类似的问题!此文有些内容来源各网站,对此表示感谢!
————2016.3.27晚 于电子楼311
原文:http://blog.csdn.net/u011089758/article/details/50994918