1. 程式人生 > >找東西的WXS

找東西的WXS

找東西的WXS

題目描述

從前,有個叫wxs的人,他每次找東西的時候,只會到自己的右邊去找東西,絕對不會返回去找,有一天,他的朋友把他的寶貝放在了一個和蜂房結構一樣的地區中的某個房子裡面,這個時候wxs就懵逼了,需要我們的幫助,假設wxs的位置是a,他的寶貝是b,那麼讓我們來編寫一個程式,計算一下a走到b的所有路線吧。
其中,結構如下所示。

分析:

對於每一個數字,都只有兩個方向可走。我們可以利用深度搜索來。將每條路都嘗試一遍

#include"stdio.h"

int count=0,start,end;
dfs(int n)
{
    if(n==end)//到了終點,count+1
    {
        count++;
        return 0;
    }
    if(n>end)//有可能會超過終點,所以,需特判
        return 0;
    else
    {
        dfs(n+2);//此兩個遞迴,分別表示兩條路
        dfs(n+1);
    }
}
int main()
{
    int x;
    scanf("%d",&x);

        while(x--)
        {
            scanf("%d%d",&start,&end);

                count=0;
                dfs(start);
                printf("%d\n",count);

        }

}

此方法可以,但因為資料過大,時間必然超限。因此,通過分析,我們會發現這就是一個數列。1 2 3 5 8 13……如果起點不是1,則通過變形將起點改成1;
程式碼如下:

#include"stdio.h"
int main()
{
    long long s[51],a,b,i,j,n;
    s[1]=1;s[2]=2;
    for(i=3;i<51;i++)
        s[i]=s[i-1]+s[i-2];
    while(~scanf("%lld",&n))
       {
           while(n--)
           {
               scanf("%lld%lld",&a,&b);
               b=b-(a)+1;
               a=1;
               printf("%lld\n",s[b-1]);
           }
       }
}