1005 Number Sequence(HDU)

系统 1639 0

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1005

 

Number Sequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 85249    Accepted Submission(s): 20209

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

 

 

解析:

这是一道寻找循环点的问题,可能很多人在杭电上通过了这个题目,但是我建议大家将自己的代码再贴到另一个OJ上进行测试 http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=2603

很多人都认为周期是49,但是给出的解题报告都不是很有说服力。

所以,我们可以寻找循环的开头以及周期,然后输出,这样能够保证正确性,当然一开始的记录数组最好能够相对大一些,不然仍然不能通过测试。



代码:

 

    #include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#define min(a,b) (a<b?a:b)

#define max(a,b) (a>b?a:b)

#define swap(a,b) {(a)=(a)^(b); (b)=(a)^(b); (a)=(a)^(b);}

#define MAXN 65535

#define INF 1e9



int f[1200];

int main(){

    int a,b,n;

    int i, j;

    int flag, term, temp, begin;

    while(~scanf("%d%d%d", &a, &b, &n), (a||b||n)){

        memset(f, 0, sizeof(f));

        f[1]=1;

        f[2]=1;

        term = n;

        flag = 0;

        for(i=3; i<=n&&!flag; i++){

            f[i] = (a*f[i-1]+b*f[i-2])%7;

            for(j = 2; j<i; j++){

                if(f[i]==f[j]&&f[i-1]==f[j-1]){

                    term = i-j;

                    begin = j-2;

                    flag = 1;

                    break;

                }

            }

        }

        if(flag)

            printf("%d\n", f[begin+(n-1-begin)%term+1]);

        else

            printf("%d\n", f[n]);

    }

    return 0;

}
  

 

1005 Number Sequence(HDU)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论