现在的位置: 首页 > 综合 > 正文

HDU ACM Fibonacci Again 解题报告

2017年10月27日 ⁄ 综合 ⁄ 共 1284字 ⁄ 字号 评论关闭

      我是个没有耐心的人,曾经玩过acm,不过感觉太无聊就没在继续,现在趁学校有专门开这个课,就把它继续下去,当年没解决的好多题目现在都能够懂了,比如说这个,当年就是在这个题解不出并且看不懂别人的结题报告以后放弃的(最主要的是代码简洁的太销魂)。现在来详细解释一番,希望自己记住并对ACM新手有所帮助(加油啊,各位)。

 

Fibonacci Again

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 40   Accepted Submission(s) : 21
Problem Description
There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2).
 

Input
Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000).
 

Output
Print the word "yes" if 3 divide evenly into F(n).

Print the word "no" if not.

 

Sample Input
0 1 2 3 4 5
 

Sample Output
no no yes no no no
 

Author
Leojay
 
刘春英老师PPT的提示:
能被3整除的整数的特点?

如果两个数的和能被3整除,这两个数有什么特点?

关于“和”能否被3整除,这两个数一共有多少种组合?

会不会出现某连续两项和后面连续两项相等的情况?如果出现,能得到什么信息?


可以先思考一下上面的问题,(上课这个都是跳过的,我都没怎么懂)

解析:
有个很重要的公式f(n)%3=(f(n-1)%3+f(n-2)%3)%3
这个公式带几个数字进去就可以理解了,我也就不多说了
一般n的数值可以取到如此之大可以见得一定有规律

先列个表吧
n
0 1
2 3 4
5 6
7 8 9
f(n)
7 11
18 29 47
76 123
199 322
521
f(n)%3
1 2
0 2 2
1 0
1 1 2

现在要找出其中的规律
因为斐波那契数是n位置的数等于它前面的两个数之和,
再运用上面的公式可以得到n位置的数除以3的余数等于前面两个数除以三的余数再除以三
所以f(n)%3那行只要重复出现1,2就表明已经重复了(后面那个数都是n=2和n=10都是(1+2)%3,同理可得后面的值都依次重复下去)
有些人会说万一规律在100次以后出现那不是惨了,
其实不是因为3的余数只有0,1,2,排列组合一些只有9种可能,因此规律在9次以后一定出现
如果类似的题目数值实在太大就只能写一段程序去寻找规律了。

根据表可以看出每8次循环一次,因此n%8=2或者6的时候值可以被3整除。
现在看一下代码,是否就一目了然了呢
#include<stdio.h>
int main()
{
    long n;
    scanf("%ld",&n) ;
  if (n%8==2 || n%8==6)
      printf("yes\n");
  else
      printf("no\n");
       return0;
}

抱歉!评论已关闭.