Problem Description

A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).

Input

The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.

Output

For each test case, print the value of f(n) on a single line.

Sample Input

1 1 3

1 2 10

0 0 0

Sample Output

2

5

1.看到题目第一反应就是用一个函数,用递归求出结果。但感觉这样做太简单了,想到这是个水题,就这么做了,下面是代码。果不其然,TML!!

#include<stdio.h>
int f(int a1,int b1,int n1){
if(n1==1||n1==2)return 1;
else
return (a1*f(a1,b1,n1-1)+b1*f(a1,b1,n1-2))%7;
}
int main(){
int a,b,n;
while(scanf("%d%d%d",&a,&b,&n)==3&&n) //n为0时结束
printf("%d\n",f(a,b,n));
return 0;
}

2.想了很久,想不明白,就去网上看别人的博客。网上的答案实在是参差不齐,但还是慢慢有了思路。

3.首先,因为题目中的f[n]最后是对7取余,故其结果只可能有7个(0~6),所以这道题应该是让大家找规律,找到循环周期,又因为当a,b确定时,f[n]只由f[n-1],f[n-2]决定,而f[n-1],f[n-2]的取值各只有7个,所以最多有49种情况。故周期大小一定<=49。但还有一个很重要的地方就是要注意可能出现循环起点不一定在f[0],f[1],可能先是一段序列,之后才开始循环(但似乎杭电服务器上关于本题的测试数据是不完整的,所以网上很多人把1,1当作循环起始点时也AC了,还是要注意)。之后就是找到循环起始点以及循环长度了。思路是从i=2开始计算f[i],并令j=i-1;j>0;j++。判断是否f[i]==f[j]&&f[i-1]==f[j-1]?从而找到start,len。然后可将n(>start)对应到区间[start,start+len-1]上来,就可以得到f[n]了。

最后,提醒一下注意n到底是数组下标还是数组中的第n个,题目给的是求第n个。我就在这折腾了一个小时,debug半天才发现......

下面是AC代码:

#include<stdio.h>
int main(){
int a,b,n,start,len; //start为循环起点,len为循环长度
while(scanf("%d%d%d",&a,&b,&n)==3&&(a||b||n)){ //a,b,n同时为0时退出循环
n--; //将n变成数组下标
start=len=0;
int f[51]={1,1}; //保存前51项的数组
for(int i=2;i<51;i++){
f[i]=(a*f[i-1]+b*f[i-2])%7; //计算m[i]
for(int j=i-1;j>0;j--){ //从i-1往前找j,使得m[i]==m[j]&&m[i-1]==m[j-1],从而确定循环起点以及循环长度
if(f[i]==f[j]&&f[i-1]==f[j-1]){
start=j-1;
len=i-j;
break;
}
}
if(len>0) //当第一次找到start,len之后退出循环
break;
}
if(n<start)
printf("%d\n",f[n]);
else
printf("%d\n",f[start+(n-start)%len]);
}
return 0;
}

体会:学到了遇到数列题目时要想想里面是不是存在周期现象,发觉里面的规律,之后解题就容易了。

hdoj1005(循环,找规律)的更多相关文章

  1. hdu6038[找规律+循环节] 2017多校1

    /*hdu6038[找规律+循环节] 2017多校1*/ #include<bits/stdc++.h> using namespace std; typedef long long LL ...

  2. A Simple Problem with Integers 循环节 修改 平方 找规律 线段树

    A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑. 龟兔赛跑算法 floyed判环算法 ...

  3. hdu4952 Number Transformation (找规律)

    2014多校 第八题 1008 2014 Multi-University Training Contest 8 4952 Number Transformation Number Transform ...

  4. HDU1005Number Sequence(找规律)

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

  5. LightOj 1245 --- Harmonic Number (II)找规律

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1245 题意就是求 n/i (1<=i<=n) 的取整的和这就是到找规律的题 ...

  6. hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)

    题目 第一次做是看了大牛的找规律结果,如下: //显然我看了答案,循环节点是48,但是为什么是48,据说是高手打表出来的 #include<stdio.h> int main() { ], ...

  7. zoj 3785 What day is that day? (打表找规律)

    题目 思路:比赛的时候有想过找循环节,但是,打表打错了. 后来,看着过了挺多人,就急了, 看了一下别人的时间 耗时都挺长的,就以为不是找规律, 没想到真是找规律,不过,这个题的数据可能挺大的. AC代 ...

  8. 【数论,找规律】Uva 11526 - H(n)

    原来做过的题再看还是没想出来,看来当时必然没有真正理解.这次回顾感觉理解更透彻了. 网上的题解差不多都是一个版本,而且感觉有点扯.根据n=20猜出来的? 好吧哪能根据一个就猜到那么变态的公式.其实这题 ...

  9. 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用

    转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html    ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...

随机推荐

  1. Flex 画图

    <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="h ...

  2. ubuntu-14.04中/boot分区不足的解决办法

    环境:ubuntu-kylin 或者 ubuntu-14.04,/boot单独分区工具:ubuntu的liveCD. 问题: 由于当初安装的时候,看网上说/boot很小,100M足以,于是单独分区,分 ...

  3. groovy Date 格式化

    刚开始使用Java,瞬间爱上:换了个厂接触到了groovy,开始有点嫌弃Java了... 看看时间的格式化 java玩法: new SimpleDateFormat("yyyy-MM-dd ...

  4. Java重写equals方法(重点讲解)

    为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往 ...

  5. match()方法解析

    match()方法支持正则表达式的String对象的方法. 上篇我说了search()方法,也支持正则表达式的String对象,那么match()方法跟search()方法有什么不同呢?我们来看看. ...

  6. week05 06绑定滚动条 去抖动

    像这种小代码 为了满足某种需求 可以直接上网搜 这些都是JS代码和react无关 我们下拉 就会触发事件从而调用loading more news 那个函数 react要求我们加个key key就是唯 ...

  7. html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?

    这种情况在软件使用过程中一般不会出现,只有测试人员在测试的时候手比较贱会给你弄一个这种数据,当然这也算是bug吧. 如图:“经营范围”的值严重超出父容器长度,并且没有像“服务信息”一样折行显示.这种情 ...

  8. Module build failed: Error: Cannot find module 'url-loader' 的坑

    本文地址:http://www.cnblogs.com/jying/p/8280956.html 开发环境:react.webpack.es5 引用图片报错:Module build failed: ...

  9. 慕容小匹夫 Unity3D移动平台动态读取外部文件全解析

    Unity3D移动平台动态读取外部文件全解析   c#语言规范 阅读目录 前言: 假如我想在editor里动态读取文件 移动平台的资源路径问题 移动平台读取外部文件的方法 补充: 回到目录 前言: 一 ...

  10. spring boot 访问jsp 弹出下载

    在pom.xml中加入以下jar 包 <!-- 引入Spring Boot 内嵌的Tomcat对jsp的解析包--><dependency> <groupId>or ...