演算法 摺紙問題

2022-09-19 11:33:13 字數 1341 閱讀 1139

左程雲演算法與資料結構課

請把一段紙條豎著放置,然後從紙條的下邊向上方對折一次,壓出摺痕後展開,此時摺痕是凹下去的。如果從紙條下邊向上方連續對折兩次,壓出摺痕後展開,此時有三條摺痕,從上到下摺痕的方向依次是凹、凹、凸。

給定乙個輸入引數 n,代表紙條從下邊向上方連續對折 n 次,請從上到下列印摺痕的方向。

例如:n = 1時,列印 down;n = 2 時,列印 down down up。

第一次對折在紙條中間出現了一條凹摺痕,記為1凹

第二次對折在1凹的上方出現一條凹摺痕(記為2凹),在1凹下方出現了一條凸摺痕(記為2凸);

第三次對折在2凹的上方和下方分別出現了一條凹摺痕(記為3凹)和一條凸摺痕(記為3凸),在2凸的上方和下方分別出現了一條凹摺痕(也記為3凹)和一條凸摺痕(也記為3凸)。

不滿發現,除了第一次對折,往後每次對折都是在上一次對折出現的新摺痕的上方和下方分別出現一條凹摺痕和一條凸摺痕。

如果把1凹作為根節點,能建立下面這麼一棵滿二叉樹:

這棵滿二叉樹滿足性質:整棵樹的根節點為凹;每一棵子樹的根節點的左孩子為凹,右孩子為凸。

對折了n次,則這棵滿二叉樹有n層。

對這棵假想的滿二叉樹作中序遍歷,得到的結果即為所求。

public class *****folding 

//遞迴過程,來到某乙個節點,

//i是節點所在層數,n是一共的層數,down == true代表凹,down == false代表凸

public static void printprocess(int i, int n, boolean down)

printprocess(i + 1, n, true); //往下遞迴,凹節點

system.out.println(down ? "down" : "up"); //列印節點的凹/凸

printprocess(i + 1, n, false); //往下遞迴,凸節點

}//test

public static void main(string args)

}

C 摺紙問題

給定輸入引數n,代表紙條從下邊向上方對折n次,請從上到下列印所有摺痕方向 1.將一張紙分為粉,黑兩面,粉色為正面,黑色為反面。2.第一次對折時粉色朝上,對折之後產生乙個向下的摺痕,這時我們把對折之後的紙粉色朝下,讓摺痕朝上把這個摺痕看成是二叉樹的根結點。3.第二次對折新產生的兩個摺痕就是根結點的子節...

程式設計題 摺紙問題

請把紙條豎著放在桌 上,然後從紙條的下邊向上 對折,壓出摺痕後再展 開。此時有1條摺痕,突起的 向指向紙條的背 這條摺痕叫做 下 摺痕 突起的 向指向紙條正 的摺痕叫做 上 摺痕。如果每次都從下邊向上 對折,對折n次。請從上到下計算出所有摺痕的 向。給定折的次數n,請返回從上到下的摺痕的陣列,若為下...

摺紙問題 列印摺痕方向

題目 請把一段紙條豎著放在桌子上,然後從紙條的下邊向上方對折1次,壓出摺痕後展開。此時 摺痕是凹下去的,即摺痕突起的方向指向紙條的背面。如果從紙條的下邊向上方連續對折2 次,壓出摺痕後展開,此時有三條摺痕,從上到下依次是下摺痕 下摺痕和上摺痕。給定一 個輸入引數n,代表紙條都從下邊向上方連續對折n次...