2020牛客寒假算法基礎集訓營4(A:歐幾里得)(規律題)

題目鏈接:

https://ac.nowcoder.com/acm/contest/3005/A

題面:

在這裏插入圖片描述
在這裏插入圖片描述

思路:

這道題目看似是考察歐幾里得,但是實際上是一道規律題,我們可以先看題目的要求,a和b都是大於0的數字,並且a是大於b的數,根據題目中的遞歸公式,我們可以看出來當b=0的時候,是不需要繼續一次遞歸的,但是首先a是要大於b的,所以當遞歸0次的時候應該就是gcd(1,0),那麼遞歸一次找最小的是不是就要遞歸一次後得到遞歸零次的最小值,那麼遞歸一次對應的就是gcd(2,1)了,接下來打表看一下。
gcd(1,0)
gcd(2,1)->gcd(1,2%1)=gcd(1,0)
gcd(3,2)->gcd(2,3%2)=gcd(2,1)

後面就基本滿足這麼一個規律,那麼我可以得到一個規律
d[0]=1
d[1]=3
d[2]=5
d[3]=8
d[4]=13

d[n]=d[n-1]+d[n-2]
然後我們就可以實現前綴和的預處理,然後之和t次訪問就直接訪問數組就可以了

參考代碼:

#include<bits/stdc++.h>
using namespace std;
long long dp[100];
int main()
{
    long long t;
    scanf("%lld",&t);
    dp[0]=1;
    dp[1]=3;
    dp[2]=5;
    for(int i=3;i<=81;i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
    }
    while(t--)
    {
        long long a;
        scanf("%lld",&a);
        printf("%lld\n",dp[a]);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章