2017第八屆藍橋杯B組決賽題解 3 希爾伯特曲線

2021-09-20 04:07:51 字數 1401 閱讀 9150

希爾伯特曲線是以下一系列分形曲線 hn 的極限。我們可以把 hn 看作一條覆蓋 2^n × 2^n 方格矩陣的曲線,曲線上一共有 2^n × 2^n 個頂點(包括左下角起點和右下角終點),恰好覆蓋每個方格一次。

hn(n > 1)可以通過如下方法構造:

1. 將 hn-1 順時針旋轉90度放在左下角

2. 將 hn-1 逆時針旋轉90度放在右下角

3. 將2個 hn-1 分別放在左上角和右上角

4. 用3條單位線段把4部分連線起來

對於 hn 上每乙個頂點 p ,我們定義 p 的座標是它覆蓋的小方格在矩陣中的座標(左下角是(1, 1),右上角是(2^n, 2^n),從左到右是x軸正方向,從下到上是y軸正方向),

定義 p 的序號是它在曲線上從起點開始數第幾個頂點(從1開始計數)。

以下程式對於給定的n(n <= 30)和p點座標(x, y),輸出p點的序號。請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。

注意:只填寫劃線處缺少的內容,不要填寫已有的**或符號,也不要填寫任何解釋說明文字等。

分析:填空位置的3*m*m作用很容易得出:加上前3個分割槽的個數。則填空部分為第四個分割槽。

根據題目很容易得到圖一的序號

觀察第乙個分割槽的遞迴函式為f(n - 1, y, x);將n=2降為n = 1時:(1,1)-> (1,1) ; (2,1) -> (1,2)...(n = 2時, m = 2^1= 2)

第二個分割槽的遞迴函式為f(n - 1, x, y - m);將n=2降為n = 1時:(1,3)-> (1,1) ; (1,4) -> (1,2)...(n = 2時, m = 2^1= 2)

第三個........

那麼第四個的遞迴函式將n=2降為n = 1時就是把(4,2)-> (1,1) ; (3,2) -> (1,2),(3,1)-> (2,2) ; (4,1) -> (2,1)很容易推導出f(n - 1, m - y + 1, m * 2 - x + 1); (n = 2時, m = 2^1= 2)

#include long long f(int n, int x, int y) 

if (x > m && y <= m)

if (x <= m && y > m)

if (x > m && y > m)

}int main()

答案:

m - y + 1

藍橋杯第八屆決賽

精神狀態不好的時候怎麼寫 真的哭了,一堆sb錯誤 對於16進製制,我們使用字母a f來表示10及以上的數字。如法炮製,一直用到字母z,就可以表示36進製。36進製中,a表示10,z表示35,aa表示370 你能算出 many 表示的數字用10進製表示是多少嗎?請提交乙個整數,不要填寫任何多餘的內容 ...

2017第八屆藍橋杯決賽 對局匹配

小明發現 的自動對局系統在匹配對手時,只會將積分差恰好是k的兩名使用者匹配在一起。如果兩人分差小於或大於k,系統都不會將他們匹配。現在小明知道這個 總共有n名使用者,以及他們的積分分別是a1,a2,an。第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 ...

第八屆藍橋杯決賽總結

最後只得了個國三安慰獎,心裡遺憾也不遺憾。省賽結束後就一直沒認真刷過題,國三也是意料之中吧。比賽題目也是中規中矩,只是自己沒好好準備。第一題很簡單的簽到題。第二題其實之前做過很多態別題,dfs,然而由於自己太久沒做題,沒手感沒題感,寫了近乙個小時,還是沒能出結果。第三題 補全題,類似生成樹,前幾屆決...