• hduNumber Sequence


    总结:

    找循环节点,

    使用一个二维数组visited[i][j]来存放前两个数为i,j时的这个数出现的位置。

    算出周期,再用一定的公式就可以解出。

    代码如下:

    #include<stdio.h>
    int main()
    {
     int a,b,n,f1,f2,f3,i,j,t,num;
     while(scanf("%d %d %d",&a,&b,&n),a||b||n)
     {
      f1=1;f2=1;int visited[8][8]={0};int flag=0;
      f3=1;
      for(i=3;i<=n;i++)
      {
       if(visited[f1][f2])
       {
        t=i-visited[f1][f2];
        num=(n-visited[f1][f2])%t+visited[f1][f2];
        for(i=0;i<8;i++)
        {
         for(j=0;j<8;j++)
         {
          if(visited[i][j]==num)
          { flag=1;
          break;}
         }
         if(flag==1)
          break;
         
        }
        f3=(a*j+b*i)%7;break;
       }
       else
       {
        f3=(a*f2+b*f1)%7;
        visited[f1][f2]=i;
        f1=f2;f2=f3;
       }
      }
      printf("%d\n",f3);
     }
     return 0;
    }

    很郁闷,做这道题目做了一个下午,主要还是自己太粗心。

    首先,在周期和根据周期算对应第一个周期里的位置时,错了,

    其次,在循环的初值安排上错了,将0写成了1

    再次,在退出二重循环的时候错了,我用了已经增值了j的visited[i][j]再次进行判断,后来改成用flag标记

    。。。。。。。所以做题目一定要细心啊,错了一个地方就要浪费掉很多时间(我找了相当多的测试数据才发现错误)。。。。

  • 相关阅读:
    [HEOI2013]Eden 的新背包问题
    [UOJ#77]A+B Problem
    [CodeForces]786B Legacy
    [LUOGU]P4098[HEOI2013]ALO
    [BZOJ3207]花神的嘲讽计划
    [LUOGU]P2633 Count on a tree
    【东莞市选2007】拦截导弹
    [JZOJ] 3462. 【NOIP2013模拟联考5】休息(rest)
    [BZOJ] 2705: [SDOI2012]Longge的问题
    [BZOJ] 1191: [HNOI2006]超级英雄Hero
  • 原文地址:https://www.cnblogs.com/pandy/p/1318946.html
Copyright © 2020-2023  润新知