藍橋杯第七屆國賽希爾伯特曲線

2021-09-21 13:42:27 字數 1383 閱讀 2673

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

[p1.png]

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點的序號。請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。

*//*

這個題看似複雜,但是你看**還是比較簡潔的,想通了其實不太難,事實上這道題的思路就是 找規律和座標變換, 那麼有什麼規律呢,由題中**可知,座標的序號在不同的部分

計算方式是不同的,但實際上是大同小異的,通過計算m的值,可以發現圖形被分成了四個部分(請看**注釋),  然後判斷座標屬於哪乙個部分,

接下來的重點就是座標變換,觀察圖形的走勢可以發現,每個部分的起點是不一樣的,於是根據每個部分的起點建立座標軸,這裡要注意座標軸的方向(1.要使該區域的點都是正的,2.要滿足題中

的旋轉,)實施上從起點出發的第一條線段是y軸,第二條線段是x軸,可以自行體會;

座標系建好了後,我們需要計算的就是所求的點在新座標系中的座標是多少,1.先觀察,2.然後在圖中找一兩個點帶進去試一下,

我們發現左下角和右下角的座標相比正常的座標是反的,再根據已知條件來大膽猜測,再列兩個式子算一下,很容易可以得出答案。

例如第二幅圖右下角區域的起點座標在第二幅圖中是(4,2),這個點的座標在新的座標系中是(1,1)(因為這個點是起點),我們需要找的就是如何把4,2變換成1,1,

m-y+1剛好可以做到,

在新座標系中的座標都是小於等於m且為正的,再來比對在原座標系中的x,y值,大概可以判斷猜假設的正確與否。 

*/ #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()

//數字字尾ll,比如3ll表示的是將3轉換為ll型別,這樣後面的都是ll型別了,可以防止溢位。 

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

第七屆藍橋杯(國賽) 隨意組合

問題描述 小明被綁架到x星球的巫師w那裡。其時,w正在玩弄兩組資料 2 3 5 8 和 1 4 6 7 他命令小明從一組資料中分別取數與另一組中的數配對,共配成4對 組中的每個數必被用到 小明的配法是 巫師凝視片刻,突然說這個配法太棒了!因為 每個配對中的數字組成兩位數,求平方和,無論正倒,居然相等...

第七屆藍橋杯(國賽) 贏球票

問題描述 某機構舉辦球票大獎賽。獲獎選手有機會贏得若干張球票。主持人拿出 n 張卡片 上面寫著 1 n 的數字 打亂順序,排成乙個圓圈。你可以從任意一張卡片開始順時針數數 1,2,3 如果數到的數字剛好和卡片上的數字相同,則把該卡片收入囊中,從下乙個卡片重新數數。直到再無法收穫任何卡片,遊戲結束。囊...

打靶 第七屆藍橋盃國賽題三

小明參加x星球的打靶比賽。比賽使用電子感應計分系統。其中有一局,小明得了96分。這局小明共打了6發子彈,沒有脫靶。但望遠鏡看過去,只有3個彈孔。顯然,有些子彈準確地穿過了前邊的彈孔。不同環數得分是這樣設定的 1,2,3,5,10,20,25,50 那麼小明的6發子彈得分都是多少呢?有哪些可能情況呢?...