2009-12-05 17:06:33來源不明

北市 98 資訊學科能力競賽 1. 海藻(algae)

作法 : 遞洄 數學 費氏數列

在此感謝BLEED大 無私的分享
0
1
0+1=01
1+01=101
01+101=01101
...類推
用回朔的方式去找

當我們要找某個位置的時候  回朔回去找來源

/**********************************************************/

#include<stdlib.h>
#include<stdio.h>
unsigned long long F[101];
void back (int N,int M)
{
   if(N==1) printf("0\n");
   else if(N==2)printf("1\n");
   else
       {
          if(M>F[N-2]) back(N-1,M-F[N-2]); 
          else back(N-2,M);
       }
}
main()
{
 
  int a,b,N,M,t;
  F[1]=1,F[2]=1;
  for(a=3;a<100;a++)
     F[a]=F[a-1]+F[a-2];
   while(scanf("%d",&t)==1)
       while(t--)
           {
              scanf("%d %d",&N,&M);
              for(a=1;a<100;a++)
                 if(M<=F[a]) break;
              if(a>N) {printf("-1\n");continue;}
              else
                 back(N,M);
           }
   return 0;
}