zoukankan      html  css  js  c++  java
  • hdu 1005 Number Sequence

    题目

    第一次做的时候用的递归,意料之中(n最大可以达到100,000,000),超时超内存。
    #include<stdio.h>
    int A,B;
    int func(int n)
    {
        if(n==1||n==2) return 1;
       return  (A*func(n-1)+B*func(n-2))%7;
    }
    int main()
    {
        int n;
       while(~ scanf("%d%d%d",&A,&B,&n),A,B,n)
       {
         printf("%d",  func(n));
       }
        return 0;
    }
    so ,要找规律,怎么找呢?不知道,所以百度之。。。
    前两个等于1,所以后面如果有两个连着的1出现,那就是出现周期了
    #include<stdio.h>
    int A,B;
    int func[50];
    int main()
    {
        int n,i;
        func[1]=func[2]=1;
       while(~ scanf("%d%d%d",&A,&B,&n),A,B,n)
       {
         for( i=3;i<50;i++)
         {
              //如果有两个连着 =1,则后面的全部和前面相同,即出现了周期  
            //这时就没必要再进行下去了,跳出循环, i-2为周期   
             func[i]= (A*func[i-1]+B*func[i-2])%7;
             if(func[i]==1&&func[i-1]==1)
             {
                 break;
             }
         }
         n=n%(i-2);
         // 把n对周期求模,当n = i-2时, n=0,此时本来应该取func[i-2]的,所以把func[0]=func[i-2]   
        //也可以这样:  
        //if(n==0)   n=i-2; 
         func[0]=func[i-2];
         printf("%d
    ",func[n]);
       }
        return 0;
    }
    


  • 相关阅读:
    设计模式-抽象工厂模式
    设计模式-工厂方法模式
    设计模式-单例
    java集合-补充HashMapJDK1.8
    java多线程-线程池
    java-阻塞队列
    java多线程-信号量
    java多线程-读写锁
    java多线程-锁
    Ubuntu下编译Poco库
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160233.html
Copyright © 2011-2022 走看看