zoukankan      html  css  js  c++  java
  • 杭电ACM1005

    Number Sequence

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

    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
     
    Author
    CHEN, Shunbao
     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int n,a,b,f[51],i,j,flag,begin,end;
     6     f[1]=1;f[2]=1;
     7     while(scanf("%d%d%d",&a,&b,&n),a|b|n)
     8     {
     9         flag=1;
    10         for(i=3;i<=n&&flag;i++)
    11         {
    12             f[i]=(a*f[i-1]+b*f[i-2])%7;
    13             for(j=2;j<=i-1;j++)
    14             {
    15                 if(f[i]==f[j]&&f[i-1]==f[j-1])
    16                 {
    17                     begin=j;
    18                     end=i;
    19                     flag=0;
    20                     break;
    21                 }
    22             }
    23         }
    24         if(!flag)
    25             printf("%d
    ",f[begin+(n-end)%(end-begin)]);
    26         else
    27             printf("%d
    ",f[n]);
    28     }
    29     return 0;
    30 }

    f[n]的值只有0到6共7种,因此必然会随着n增加,出现f[n]=f[i].f[n-1]=f[i-1]的情况,此时便是循环节开始了,之后的计算只需要知道n到循环起始位的距离就能按规律得出f[n]。而f[n]为0~6,表达式中两个f(n)产生49种可能。因此随着n增大到2+49=51必然出现循环,我们也只须定义int f[51]即可,只定义到50便是错误。

    由此可见,关键在找到循环节起始位。

  • 相关阅读:
    在64位Win7下安装Oracle 10g客户端,以及PL/SQL Developer的经验
    Windows 8/Windows 8.1激活CMD命令大全
    安装交叉编译工具出错,arm-linux-gcc: 没有那个文件或目录
    驱动设备号创建
    内核驱动调试
    stm32定时器接力
    linux常用命令
    stm32定时器外部计数
    stm32 flash 选择
    pymysql 使用twisted异步插入数据库:基于crawlspider爬取内容保存到本地mysql数据库
  • 原文地址:https://www.cnblogs.com/cccczh/p/5754251.html
Copyright © 2011-2022 走看看