杭电OJ1005-斐波拉契相关Number Sequence

来源:互联网 发布:c语言输出完全数 编辑:程序博客网 时间:2024/05/21 09:17
英语是硬伤,继续google

问题描述
一个数字序列被定义如下:
F(1)= 1中,f(2)= 1,F(N)=(A * F(N - 1)+ B * F(N - 2))模7。
由于A,B,和n,你要计算F(n)的值。
输入
输入由多个测试用例。每个测试用例包含3个整数A,B和N在一行(1<= A,B<= 1000,1<= N <=100,000,000)个。三个零信号输入的端部和该测试的情况是不进行处理。
输出
对于每一个测试用例,打印F(N)在一行的值。

我的代码:
#include<stdio.h>main(){    int s[100];    int a,b,n,i;    while(scanf("%d%d%d",&a,&b,&n)!=EOF&&(a||b||n))    {        s[1]=1;        s[2]=1;        for(i=3;i<=49;i++)        {            s[i]=(a*s[i-1]+b*s[i-2])%7;        }        printf("%d\n",s[n%49]);    }    return 0;}


解题思路:
找规律是唯一的方法。
从题目中可以看出点关键:1<= N <=100,000,000
N的上限这么大,纯用斐波拉切求肯定是会越界的
打表好像也不是很方便,所以是循环
因为模总是在0~6之间,所以f(i-1)与f(i-2)也是如此,所以公式就有7X7=49种情况,49以后肯定是一个循环
前49项可以用斐波拉切

目前知道的找规律这类的题还有:1021、1061、1061、1097
0 0
原创粉丝点击