zoukankan      html  css  js  c++  java
  • hd acm1005

    问题:

    已知递推公式:f[i] = ( a * f[i-1] + b * f[i-2] ) % 7,f[1]=1,f[2]=1。

    需要你输入三个数a,b,n。其中a,b用来补充上述公式,用补充后的公式计算 f[n]。

    析:

    每次输入a,b都会有一个对应的公式,由这个公式会得到的一个周期性的数列,然后利用这个周期来计算f[n]便可以了。所以如何找到周期是重点,因为每个周期开始时前两个数字会是1,1,这可以是一个标志,当然别的标志也可以;另外需要注意一点,如果a,b都能整除7,那么从f[3]向后都会成为0,可以直接结束。

    代码:

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
      int a,b,i,n,flag;
      int f[201]={1,1,1};
      while(scanf("%d%d%d",&a,&b,&n))

      {
        if(!(a||b||n)) break; //a,b,n全是0时结束循环
        flag=0;
        for(i=3;i<=200;i++)

        {
          f[i]=(a*f[i-1]+b*f[i-2])%7;
          if(f[i]==1&&f[i-1]==1     //找到周期时结束
            if(i>3) break;      //防止出现1,1,1,1,1,1,1......1,1......的情况
          if(a%7==0&&b%7==0)      //如果a,b都能整除7,则f[3]之后的全为0,直接输出并结束
          {   

             flag=1;
             break;
          }
        }
         if(flag){
          printf("0 ");
          continue;
        }
           i-=2;               //i-2是周期。
        n%=i;
       if(!n) n=i;
         printf("%d ",f[n]);
      }
    return 0;
    }

  • 相关阅读:
    debounce
    react-xiguan
    备忘录
    ie导出问题
    umi 动态路由配置
    tsconfig
    关于vue 和react 中的hash与锚点冲突问题
    lodash
    pyplot绘图
    Numpy实现图像变换
  • 原文地址:https://www.cnblogs.com/clljs/p/7450013.html
Copyright © 2011-2022 走看看