初次接触这道题,我便想到了原来的写过的斐波拉契数列,便用一个个递推的函数从n一个一个的计算,直到运算出f[n]的值,结果呢,可想而知,不是时间超时,便是堆栈溢出!
后面才知道这种题一定存在一个循环的节点,而你所做的便是通过程序或这自己的计算得到出现循环的位置!下面通过代码解释:
接下来这题也是数列循环节的问题
此题便既可以通过程序寻找循环的节点,亦可以同过数学运算得到循环的节点:
第一种方法:数学运算法
可以发现这是从2开始每隔四个出现一次
于是代码为
注意各大OJ ac的标准不是需要执行题中所给的各个步骤,只需要你在最后的时候得到的结果满足题目的要求就可以了!
接下来是一种较笨的方法,因为题中所给的数据并不算大,只到1000000,所以我们完全可以采取去不打印出它与3取余的结果,再判断输出,