hdu 1005 number sequence

来源:互联网 发布:pta编程 编辑:程序博客网 时间:2024/06/05 20:33
问题看出来了,只要首先出现1,1,那么循环节也就找到了(两个值决定后面的值,不断推算,这也算是类斐波那契数列的特点吧)。然后取模处理,输出即可。但是,奇怪的是提交后要么wa,要么runtime error.呵呵~不断改进:控制循环,简洁语句,让自己多想不让电脑多干。最终得到了答案:
#include <iostream>#include<cstdio>using namespace std;int f[10001];int main(){    int A,B,n;    f[1]=f[2]=1;    while(~scanf("%d%d%d",&A,&B,&n)&&A&&B&&n){        int i;        for(i=3;i<=10000;i++){            f[i] = (A * f[i - 1] + B * f[i - 2])%7;            if(f[i]==1&&f[i-1]==1)break;        }        n=n%(i-2);        //for(int i=1;i<=n;i++)cout<<f[i]<<" "; cout<<endl;        if(n==0)n=i-2;        printf("%d\n",f[n]);    }    return 0;}

结果让人悲伤,依然错误。借鉴了一下别人的代码,稍加改动:
 
 #include <iostream>   #include<cstdio> using namespace std;   int arr[10000];    int main()   {          int A,B,n;        arr[1] = arr[2] = 1;          while(~scanf("%d%d%d",&A,&B,&n)&&A&&B&&n)          {              int i;              for(i=3; i<10000 ;i++)              {                  arr[i] = (A*arr[i-1] + B*arr[i-2]) % 7;                   if(arr[i] == 1 && arr[i-1] == 1)break;              }              n = n % (i-2);            if(n==0)n=i-2;            //arr[0] = arr[i-2];              printf("%d\n",arr[n]);        }          return 0;  }  


居然AC了,两份代码除了数组名不一样外还有差别吗?真是醉了。。。
0 0
原创粉丝点击