#include <stdio.h>
#include <string.h>
int main()
{
int a,b,n;
int i;
int f[]={};
f[]=;
f[]=;
while(scanf("%d %d %d",&a,&b,&n)!=EOF){
if(a==){
break;
}
for(i=;i<;i++){
f[i]=(a*f[i-]+b*f[i-])%;
}
if(n<=){
printf("%d\n",f[n-]);
}
else{
printf("%d\n",f[(n-)%+]);
}
}
return ;
}

因为n可能比较大,它决定了递归的层数,所以不能够用递归了,因为栈可能容不下这么大。

否则用递归是一件很轻松的事。

那么得寻找规律:

每个f(n)的结果与f(n-1)和f(n-2)有关

而f(n-1)只可能是0~6其中的一个,所以共7种(除了f(1)和f(2))

而f(n-2)也是0~6其中的一个,也共7种(除了f(1)和f(2))

那么f(n)的结果也只会是0~6之间的一个数

按照a和b的大小,每个f(n)的结果都是[(a倍0~6)+(b倍0~6)]%7

设x=f(n-1)和y=f(n-2),那么可能出现的组合有:
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6)
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6)
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6)
(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6)

以数组a[100]来测试,a[0]=1,a[1]=1,以下是100个数的后48*2个,即a[4]~a[99],其中a[4]~a[51]为一个周期,a[52]~a[99]可以看出又是另一个周期。(自己测试前100个即可)

总结:

以代码中的f[100]这个数组来讲,f[0]~f[3]是没规律的,如果给这几个数,直接输出即可。

f[4]~f[51]是第一个周期内的所有数据,共48个。f[52]~[99]、f[100]~f[147].....类推下去

如果n<=52那么直接输出就行了,如果大于52,那么就要对应到f[4]~f[51]中的一个数了。

HDU 1005 Number Sequence(AC代码)的更多相关文章

  1. HDU 1005 Number Sequence(数列)

    HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...

  2. HDU 1005 Number Sequence(数论)

    HDU 1005 Number Sequence(数论) Problem Description: A number sequence is defined as follows:f(1) = 1, ...

  3. HDU - 1005 Number Sequence 矩阵快速幂

    HDU - 1005 Number Sequence Problem Description A number sequence is defined as follows:f(1) = 1, f(2 ...

  4. HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. HDU 1005 Number Sequence (模拟)

    题目链接 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f( ...

  6. HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. HDU 1005 Number Sequence(矩阵快速幂,快速幂模板)

    Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...

  8. HDU - 1005 -Number Sequence(矩阵快速幂系数变式)

    A number sequence is defined as follows:  f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) m ...

  9. HDU 1005 Number Sequence

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  10. hdu 1005:Number Sequence(水题)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

随机推荐

  1. vsto publish后无法弹出winform窗口

    http://www.cnblogs.com/xiyang1011/archive/2011/06/07/2074025.html - - 没有调用form.show()...

  2. 关于php用simplexml_load_string解析xml出现乱码的小结

    最近在做项目时需要通过xml接口读取合作伙伴数据到数据库,在xml解析环节出现有些特殊中文字符乱码的现象.后采取下面的办法终于解决. 1.curl 抓取过来的字符是unicode编码,需要先转换为ut ...

  3. CentOS 常用命令大全

    下面,就给大家介绍这些CentOS常用命令. 一:使用CentOS常用命令查看cpu more /proc/cpuinfo | grep "model name" grep &qu ...

  4. linux 下crontabs使用

    安装crontab:[root@CentOS ~]# yum install vixie-cron[root@CentOS ~]# yum install crontabs说明:vixie-cron软 ...

  5. 键盘控制select选项上下

    $('#k').live('keydown',function(event){ if (event.keyCode==38){ /*$(this).addClass("active" ...

  6. 安装VMWare tools,以及解决安装后/mnt中有hgfs但没共享文件的方法

    一.首先是安装VMWare tools   安装过程可参考:Installing VMware Tools in an Ubuntu virtual machine   安装成功后,可看的如下信息: ...

  7. C语言:文件操作

    以附加方式打开文件,输入数据,关闭文件. #include<stdio.h> #include<stdlib.h> int main() { FILE *fp = NULL; ...

  8. sql 给数据库表 字段 添加注释

    最近发现一些代码生成器 有针对注释做一个很好的转化,之前建表的时候 没有这块的注释.现在想增加,专门去看了下 如何增加注释 1 -- 表加注释 2 EXEC sys.sp_addextendedpro ...

  9. Autolayout-VFL语言添加约束

    一.VFL语言简洁 VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码.为我们简化了许多代码量. 二.使用步骤 使用步骤 ...

  10. JAVA每日一旅3

    1.关于byte byte在内存中占一个字节,范围是-128-127,128作强制类型转换到byte变成-128,因为128的二进制表示:1000 0000,最高位是符号位. 2.关于Hibernat ...