信息學 (計算機) 奧林匹克訓練題 (中級部分)
天津師範大學 李學武 編 1997.7.
1. 給定等式 A B C D E 其中每個字母代表一個數字,且不同數字對應不
D F G 同字母。編程求出這些數字並且打出這個數字的
+ D F G 算術計算豎式。
───────
X Y Z D E
2. A、B、C、D、E五名學生有可能參加計算機競賽,根據下列條件判斷哪些
人蔘加了競賽:
(1)A參加時,B也參加;
(2)B和C只有一個人參加;
(3)C和D或者都參加,或者都不參加;
(4)D和E中至少有一個人參加;
(5)如果E參加,那麼A和D也都參加。
3. 打印一個 N*N 的方陣,N爲每邊 N=15 打印出下面圖形
字符的個數(3<N<20), 要求最 TTTTTTTTTTTTTTT
外一層爲"T", 第二層爲"J", 從第三層 TJJJJJJJJJJJJJT
起每層依次打印數字 1,2,3,... TJ11111111111JT
(右圖以N爲15爲例) TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
4. 在N行N列的數陣中, 數K(1〈=K〈=N)在每行和每列中出現且僅
出現一次,這樣的數陣叫N階拉丁方陣。例如下圖就是一個五階拉丁方陣。
編一程序,從鍵盤輸入N值後,打印出所有不同的N階拉丁方陣,並統計個數。
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
5. 輸入一個十進數,將其轉換成 N 進制數(0<N<=16)。
6. 矩陣中填數. 當給出 N*N 的矩陣,要求用程序填入下列形式的數:
① 倒填,例如N=5 ② 蛇形填數 ③ 迴轉填數
┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐
│25│24│23│22│21│ │ 1│ 3│ 4│10│11│ │ 1│16│15│14│13│
├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
│20│19│18│17│16│ │ 2│ 5│ 9│12│19│ │ 2│17│24│23│12│
├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
│15│14│13│12│11│ │ 6│ 8│13│18│20│ │ 3│18│25│22│11│
├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
│10│ 9│ 8│ 7│ 6│ │ 7│14│17│21│24│ │ 4│19│20│21│10│
├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
│ 5│ 4│ 3│ 2│ 1│ │15│16│22│23│25│ │ 5│ 6│ 7│ 8│ 9│
└─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘
7. 讀入一行文本,包含若干個單詞(以空格間隔,%結尾)。將其中以 A 開頭的
單詞與以 N 結尾的單詞,用頭尾交換的辦法予以置換。
8. 輸入兩個正整數X,Y,將X,Y化爲二進制數,然後將這兩個二進制數作二進
制加法運算,再將結果化爲十進制數輸出。
9. 四人玩火柴棍遊戲,每一次都是三個人贏,一個人輸。輸的人要按贏者手中的火柴
數進行賠償,即贏者手中有多少根火柴棍,輸者就賠償多少根。現知道玩過四次後,
每人恰好輸過一次, 而且每人手中都正好有16根火柴。問此四人做遊戲前手中各有
多少根火柴? 編程解決此問題。
10. 如圖1所示,編寫程序計算 ┎┰┰┰┰┰┰┰┰┰┒
大大小小正方形共有多少?當最小 ┠╂╂╂╂╂╂╂╂╂┨
正方行邊長爲1時,它們的總面積 ┠╂╂╂╂╂╂╂╂╂┨
共爲多少? ┠╂╂╂╂╂╂╂╂╂┨
┠╂╂╂╂╂╂╂╂╂┨
┠╂╂╂╂╂╂╂╂╂┨
┠╂╂╂╂╂╂╂╂╂┨
┠╂╂╂╂╂╂╂╂╂┨
┠╂╂╂╂╂╂╂╂╂┨
┠╂╂╂╂╂╂╂╂╂┨
┖┸┸┸┸┸┸┸┸┸┚
11. 巧排數字。將1、2、...、20這20個數排成一排,使得相鄰的兩個數之
和爲一個素數,且首尾兩數字之和也爲一個素數。編程打印出所有的排法。
12. 下圖是一個集裝箱倉庫,陰影部分表示有集裝箱存放不能通過,無陰影處爲臨時通
道。當有人要從入口處到達出口處時,必須尋找可通過路線,請你找出可完成這個過程
的最方便(即用最短路線)到達出口處的路徑。
┎┰┰┰入口┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┰┒
┠╂╂╂──╂╂╂╂┸┸╂┸┸╂┸┸╂┸┸╂╂╂╂┸┸╂╂╂┨
┠╂╂╂──╂┸┸╂──╂┰┰╂┰┰╂──╂╂╂╂──╂╂╂┨
┠╂╂╂──╂┰┰╂┰┰╂╂╂╂╂╂╂──╂┸┸╂──╂╂╂┨
┠╂╂╂──╂╂╂╂╂╂╂╂╂╂╂╂╂┰┰╂┰┰╂┰┰╂╂╂┨
┠╂╂╂──╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂┸┸╂╂╂┨
┠╂╂╂──╂┰┰╂┰┰╂┰┰╂──╂┰┰╂──╂┰┰╂╂╂┨
┠╂╂╂──╂╂╂╂╂╂╂╂╂╂──╂╂╂╂──╂╂╂╂╂╂┨
┠╂╂╂──╂╂╂╂┸┸╂┸┸╂──╂╂╂╂──╂┸┸╂╂╂┨
┠╂╂╂──╂╂╂╂┰┰╂┰┰╂┰┰╂╂╂╂┰┰╂──╂╂╂┨
┖┸┸┸──┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸┸出口┸┸┸┚
13. 有N個硬幣(N爲偶數)正面朝上排成一排,每次將 N-1 個硬幣翻過來放在原位
置, 不斷地重複上述過程,直到最後全部硬幣翻成反面朝上爲止。編程讓計算機把
翻幣的最簡過程及翻幣次數打印出來(用*代表正面,O 代表反面)。
14. 有黑白棋子各有N個(分別用*和O代替),按下圖方式排列
***...***OOO...OOO
N個黑棋 N個白棋
允許將相鄰兩個棋子互換位置,最後使隊形成黑白交替排列,試編程實現該操作。
15. 已知6個城市,用c[i,j]表示從i城市到城市j是否有單向的直達汽車
(1=<i〈=6,1〈=j〈=6), c[i,j]=1 表示城市i到城市j有單向直達汽
車; 否則 c[i,j]=0. 試編制程序,對於給出的城市代號i,打印出從該城市出
發乘車(包括轉車)可以到達的所有城市。
16. 設有8枚硬幣a,b,c,d,e,f,g,h,其中有一枚硬幣是僞造的。 真僞硬幣的區別僅是重量不同,可能重,可能輕。今要求以天平爲工具,用最少的 比較次數挑出僞造硬幣,並鑑定它是重還是輕。 17. 編寫一個程序,當輸入不超過60個字符組成的英文文字時,計算機將這個句子 中的字母按英文字典字母順序重新排列,排列後的單詞的長度要與原始句子中的長度 相同。例如: 輸入: THE PRICE OFBREAD IS ¥1 25 PER POUND 輸出: ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU 並且要求只對A到Z的字母重新排列,其它字符保持原來的狀態。 18. 在一線性七個格位置的圖上有兩種不同顏色的棋子A,B. 排列如下圖所示,中間 格的位置爲空。 ┎─┰─┰─┰─┰─┰─┰─┒ ┃A┃A┃A┃ ┃B┃B┃B┃ ┖─┸─┸─┸─┸─┸─┸─┚ 要求將A,B的現行位置交換,形成下圖中的排列: ┎─┰─┰─┰─┰─┰─┰─┒ ┃B┃B┃B┃ ┃A┃A┃A┃ ┖─┸─┸─┸─┸─┸─┸─┚ 移動棋子的條件: (1) 每個格中只准放一個棋子。 (2) 任意一個棋子均可移動一格放入空格內。 (3) 一方的棋子均可跳過另一方的一個棋子進入空格。 (4) 任何棋子不得跳躍兩個或兩個以上棋子(無論顏色同異) (5) 任何一個顏色棋子只能向前跳,不準向後跳。 編程完成有關的移動,並且完成具有2N+1個格子的情形. 其中兩種顏色各有 N個棋子,且中間爲空格. 19. (揹包問題) 有 N 件物品 d1,......dN,每件物品重量爲 W1,..., WN (Wi > 0), 每件物品價值爲 V1,......VN (Vi>0)。用這N件物品的某個子集 填空揹包,使得所取物品的總重量<=TOTAL,並設法使得揹包中物品的價值儘可 能高。 20. (N皇后) 在國際象棋的棋盤上放置N個皇后,使其不能互相攻擊,即任意 兩個皇后不能處在棋盤的同一行,同一列,同一斜線上,試問共有多少種擺法? |
21. 請設計一個程序,由計算機把1.. ̄.8的八個自然數填入圖中,使得橫、
豎、對角任何兩個相鄰的小方格中的兩個數是不連續的。(下圖右側的 4 個圖
爲禁止的情形).
┌─┐ ┌─┐ ┌─┐
│ │ │4│ │8│
┌─┼─┼─┐ └─┼─┐ ┌─┼─┘
│ │ │ │ │5│ │7│
├─┼─┼─┤ └─┘ └─┘
│ │ │ │ ┌─┐
└─┼─┼─┘ │6│ ┌─┬─┐
│ │ ├─┤ │1│2│
└─┘ │7│ └─┴─┘
└─┘
22. 在一個4*4的小方格(如圖所示)中放置8個*號,使得每行每列放且
僅放兩個*號。
┌─┬─┬─┬─┐
│*│*│ │ │
├─┼─┼─┼─┤
│*│ │*│ │
├─┼─┼─┼─┤
│ │*│ │*│
├─┼─┼─┼─┤
│ │ │*│*│
└─┴─┴─┴─┘
求出所有的基本解。
23. (覆蓋問題) 有邊長爲N(N爲偶數)的正方形,請你用N^2/2個長爲2,
寬爲1的長方形,將它全部覆蓋。編程打印出所有覆蓋方法。如:N=4
┌─┬──┬─┐ ┌──┬──┐
│ │ │ │ 1224 │ │ │ 1122
│ ├──┤ │ ├──┼──┤
│ │ │ │ 1334 │ │ │ 3344
├─┼──┼─┤ ├──┼──┤
│ │ │ │ 5668 │ │ │ 5566
│ ├──┤ │ ├──┼──┤
│ │ │ │ 5778 │ │ │ 7788
└─┴──┴─┘ └──┴──┘
24. 某地街道把城市分割成矩形方格,每一方格叫作塊,某人從家中出發上班,
向東要走M塊,向北要走N塊,(見圖)。請設計一個程序,由計算機尋找並
打印出所有的上班的路徑。
單位
┬ ┌─┬─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │ │ │
│ ├─┼─┼─┼─┼─┼─┼─┤
↓ │ │ │ │ │ │ │ │
N ├─┼─┼─┼─┼─┼─┼─┤
↑ │ │ │ │ │ │ │ │
│ ├─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │
┴ └─┴─┴─┴─┴─┴─┴─┘
家 ├─────→M←─────┤
25. (量水) 用存水爲M,N升的兩個罐子,量出A升水。
26. (八數碼問題) 8個編有數碼1 ̄8的滑牌,能在3*3的井字格中滑動。 31. 甲乙兩人從24枚棋子中輪流取子,甲先取,規定每次所取的枚數不能多於上 32. ( 走棋 ) 一個4*4的方陣如圖。有一個小卒從上往下走。走至格子1後就 34. ( 取棋子 ) 設有N顆棋子,由人和計算機輪流從中取走若干顆。每方每次最 36. 猴子選大王: 41. (合併鏈表) 已知兩個鏈表 AN={a1,a2,...an}, BN={b1,b2,...bm}, 將其合併
57. 某一印刷廠有六項加工任務,對印刷車間和裝訂車間所需時間見下表(時間單 位:天) 任務 │J1 J2 J3 J4 J5 J6 ─────┼─────────────── 印刷車間│ 3 12 5 2 9 11 裝訂車間│ 8 10 9 6 3 1 如何安排加工順序,使加工時間最少。
58. 將7萬元投資到A,B,C三項目上,其利潤見下表: 投資額(萬元)│ 1 2 3 4 5 6 7 ──────┼──────────────────── 項 A │0.11 0.13 0.15 0.24 0.24 0.30 0.35 B │0.12 0.16 0.21 0.25 0.25 0.29 0.34 目 C │0.08 0.12 0.20 0.26 0.26 0.30 0.35 如何分配投資額,使獲得的利潤最大。
59. 無根樹與通常所說的樹(有根樹)很相似,它包含有節點和枝,但不含有根。 無根樹節點之間只有相鄰關係。如圖一所示,是一棵有七個節點的無根樹,以圖一 的A爲根節點得到圖二所示的有根樹,以B爲根節點得到圖三所示的有根樹,但從 無根樹的角度看,圖一、二、三是結構相同的無根樹,同時無根樹的結構與節點的 名稱無關。 有根樹可以用字符串的形式表示,其遞歸表示方法是: 根節點(子樹1 子樹2 子樹3...) 圖一,圖二的有根樹可表示爲 A(B(CF(EGD))) 和 B(ACF(EGD))。由於子樹的表示 順序可以不同,所以一棵有根樹可以有多種表示方法,如圖三又可表示成 B(F(EGD)CA) 或 B(ACF(DE(G)) 等。表示無根樹時,可以以它任一節點爲根節點, 將其看作有根樹,從而可以利用有根樹的字符串表示形式來表示無根樹。 任務一:由鍵盤讀入一個字符串表示的無根樹,無根樹的各節點的名稱用互不 相同的大寫英文字母表示。由用戶輸入一個節點的名稱,程序應能夠輸出一種以該 節點爲根節點的字符串形式。程序輸出無根樹的字符串形式時,各個節點的名稱無 關緊要,所有節點都以P表示,以後的各種輸出也採用這種形式。例如:輸入無根 樹的字符串形式:A(B(CD(EF))),指定根節點爲D,程序應能輸出 P(P(PP)PP),P(PP(PP)P),P(PPP(PP))中的任意 一種即可。 任務二:輸入兩個串表示的無根樹,判斷其結構是否一樣。注意它與節點名稱 無關,只考慮結構。 任務三:輸入無根樹的總枝數N(1<=N<=11),輸出所有枝數爲N的互不相同 的無根樹,並記錄總數。以字符串形式輸出,例如:N=5 時共有6種不同結構的無 根樹。 注意:各種樹結構的字符串表達形式不唯一。
60. 用N*N(1<=N<=8)的格點陣代表海,其中*號代表島。給你一組編 碼信息,讓你重構一張地圖。這組信息是按垂直方向,水平方向島的情況摘取的。 下例中,每行右邊的數字按順序表示該行中“島組”的大小,如第一行數字爲 “12”,表示該行第一“島組”由一個島組成,第二“島組”由兩個島組成,而 第四列下面的“23”則表示本列由兩個“島組”組成,第一個“島組”由兩個島 組成,第二個“島組”由三個島組成。 任務:編程執行以下步驟,直到給定的輸入 (ASCII) 文件中的信息組全部讀完 爲止,步驟如下: (1)從輸入文件 (ASCII 文件)中讀入下一個信息塊,並將它顯示在屏幕上。 每個信息塊組成爲: 格點陣大小 (N),以後是行的約束條件(N行的),列的約束條件(N列的), 每行(或每列)的約束條件是 一行數字,數字間有空格,最後用0結束。上面的例子如圖所示。 (2)重構這張地圖(若有多個解,要逐個構成地圖),並顯示。 (3)將重構的地圖以ASCII文件形式輸出。每島以*後加一個空格表示; 空白處用連續的兩個空格表示。若同一已知條件可畫出多張地圖,相互間用空行隔 開;若一組已知條件畫不出地圖,用“NO MAP(佔一行)表示。由不同的信 息組求得的解用“NEXT PROBLEM”(佔一行表示)1<=N<=8.
61. 一個餐廳在相繼的N天裏,第 i 天需要 Ri 塊餐巾(i=1,2,...,N)。餐廳 可以從三種途徑得到餐巾: (1) 購買新的餐巾,每塊需P分; (2) 把用過的餐巾送到快洗部,洗一塊需M天,費用需F分(F<P); (3) 把餐巾送到慢洗部,洗一塊需N天(N>M),費用需S分(S<F)。 在每天結束時,餐廳必須決定將多少塊用過的餐巾送到快洗部,多少塊送慢洗部, 多少塊保存起來延期送洗。在每天開始時,餐廳必須決定是否購買新餐巾及購買多 少,使洗好的和新購的餐巾之和滿足當天的需求量Ri,並使N天總的費用最小。請 編程輸入總天數,每天所需的餐巾塊數以及每塊餐巾的新購費用P,快,慢洗費用 F,S,和所需天數M,N,輸出每天開始時需購新餐巾數,結束時送快,慢洗部 和延期送洗的餐巾數。
62. ( 旅行商 ) 一個推銷員計劃做一次旅行,他必須訪問如圖所示每個城市。每 兩個城市的路徑旁標有路徑。要求從城市A出發,訪問每個城市一次,且只訪問一 次,最後返回城市A,求一條距離最短的路線。
63. (tic__tac__toe 遊戲) tic__tac__toe 遊戲的規則是:從一個空的 (N*N) 的 棋盤(例如N=3)開始,甲乙二人輪流將棋子放置在棋盤上未被佔據的方格中, 例如甲第一個放,他把棋子放在中央的方格里, 然後輪到乙放,他把棋子放在第 一行中間的方格里。於是又輪到甲放,......如此進行下去。判定勝負的方法是: 若某一遊戲者有N枚棋子佔據了一橫行,或一豎列,或一對角線,則此人獲勝;若 直至整個棋盤被佔滿還沒有一方獲勝,則爲平局。 ┏━┯━┯━┓ ┏━┯━┯━┓ ┏━┯━┯━┓ ┃ │ │ ┃ ┃ │ │ ┃ ┃ │O│ ┃ ┠─┼─┼─┨ ┠─┼─┼─┨ ┠─┼─┼─┨ ┃ │ │ ┃ ┃ │X│ ┃ ┃ │X│ ┃ ┠─┼─┼─┨ ┠─┼─┼─┨ ┠─┼─┼─┨ ┃ │ │ ┃ ┃ │ │ ┃ ┃ │ │ ┃ ┗━┷━┷━┛ ┗━┷━┷━┛ ┗━┷━┷━┛
64. 以字符串形式由鍵盤輸入兩個高精度的8進制正整數,串長小於255,以 第一個數爲被除數,第二個數爲除數,進行高精度除法運算,並顯示按 8 進製表 示的商和餘數。 ( 參看程序 8 )
65. ( NOI'94.1_1 ) 鍵盤輸入一個僅由小寫字母組成的字符串,輸出以該串中任 取M個字母的所有排列及排列總數。
66. ( NOI'94.1_2 ) 編程實現兩個高精度實數減法,兩數分別由鍵盤輸入,均不 超過240位。 ( 參看程序 5 )
67. ( NOI'94.1_3 ) 一個實數數列共有N項,已知a(i)=(a(i-1)-a(i+1))/2+d, (1〈i〈N)(N<60) , 鍵盤輸入N,d,a(1),a(n),m,輸出 a(m)。
68. ( NOI'94.1_4 ) 鍵盤輸入一個高精度的正整數N,去掉其中任意S個數字後 剩下的數字按原左右次序將組成一個新的正整數。編程對給定的N和S,尋找一種 方案使得剩下的數字組成的新數最小。輸出應包括所去掉的數字的位置和組成的新 的正整數。(N不超過240位)
69. 在兩個文本文件中各存有一個以西文製表符製成的未填入任何表項的表結構, 分別稱之爲表1和表2,要求編程將表1和表2下述規則合併成表3: 規則:表1在表2之上,表1和表2的左邊框對齊,將表1的最低行與表2的 最頂行合併。例:在你的C盤根目錄下有兩個文件 t0.1 和 t0.2,分別存放上述 的表1和表2,經上述規則合併後得到表3,放在文件中。三張表見下圖: ┎─┰─┰─┰─┒ ┎─┰─┰─┰─┒ ┃ ┃ ┃ ┃ ┃ ┎┰─┰─┒ ┃ ┃ ┃ ┃ ┃ ┠─╂─╂─╂─┨ ┃┃ ┃ ┃ ┠─╂─╂─╂─┨ ┃ ┃ ┃ ┃ ┃ ┖┸─┸─┚ ┃ ┃ ┃ ┃ ┃ ┖─┸─┸─┸─┚ ┠┰┸┰┸┰┸─┚ ┃┃ ┃ ┃ ┖┸─┸─┚ 表1 表2 表3 編程要求: (1) 程序應能自給定的文件中讀入兩個源表並顯示。 (2) 若源表有錯,應能指出其錯。 (3) 將表1和表2規則合併成表3,並顯示之。 (4) 所有制表符的ASCII碼應由選手自己從給出的示例文件中截取。
70. (圓盤問題) 從左向右依次安放 4 根細柱 A,B,C,D. 在 A 上套有 N (N≤20) 個直徑相同的圓盤, 從下到上依次用連續的小寫字母 a,b,c,...編號, 將這些圓盤 經過 B, C 單向地移入 D (即不允許從右向左移動). 圓盤可在 B,C 中暫存. 從鍵 盤輸入 N, 及前 N 個小寫字母的一個排列, 它表示最後在 D 盤上形成的一個從下 到上的圓盤序列. 請用文本文件 ANS2.TXT 輸出形成這一排列的操作過程. 該文件的每一行爲一個形如 "k M L" 的字母序列, 其中 k 爲圓盤編號, M 爲 k 盤原先的柱號, L 爲新柱號. 或者直接在屏幕上輸出"No",表示不能生成這種排列. 例: ┃ ┃ ┃ ┃ 鍵盤輸入: ┃ ┃ ┃ ┃ 3 d ━╋━ ┃ ┃ ┃ acb c ━╋━ ┃ ┃ ┃ 則一個正確的輸出文件 b ━╋━ ┃ ┃ ┃ 可以是: a ━╋━ ┃ ┃ ┃ c A B ━━┻━━━┻━━━┻━━━┻━ b A C A B C D a A D b C D c B D
71. (最長連線) 設有一個 N×N 的方格圖形,且 N 爲 3 的倍數。要求在圖形中 存放 0 或 1,相鄰的 1 可以連成一條連線,連接的方法可以是行,也可以是列; 同時約定一條連線只能有一個起點和一個終點,圖形上的點最多隻能訪問一次。 編程求最長連線. 例如 N=6 時,有下圖: 1 2 3 4 5 6 ┌─┬─┬─┬─┬─┬─┐ 1 │1│1│1│0│0│1│ ├─┼─┼─┼─┼─┼─┤ 2 │1│1│0│1│1│1│ ├─┼─┼─┼─┼─┼─┤ 3 │0│0│0│1│0│1│ ├─┼─┼─┼─┼─┼─┤ 4 │1│1│0│1│1│1│ ├─┼─┼─┼─┼─┼─┤ 5 │0│1│0│0│0│0│ ├─┼─┼─┼─┼─┼─┤ 6 │1│1│1│1│0│0│ └─┴─┴─┴─┴─┴─┘ 在該圖中,包含有如下的一些連線: 1←1←1 1←1 1 ↓ ↓ ↓ 1→1 1 1→1 1 ↓ ↑ ↓ 1→1→1 1 1 ↑ ↓ 1←1←1 在以上的連線中,最長的連線爲: 表示方法: 1 最長連線長度:LMAX=9 ↓ 連線:(1,6)→(2,6)→ 1→1 1 (3,6)→(4,6)→ ↑ ↓ (4,5)→(4,4)→ 1 1 (3,4)→(2,4)→ ↑ ↓ (2,5) 1←1←1 連線的表示不是唯一的,僅給出一種即可。
72. (NOI'95.1_2) 在一個園形操場的四周擺放 N 堆石子(N≤100), 現要將石子 有次序地合併成一堆。規定每次只能選相鄰的兩堆合併成新的一堆,並將新的一堆 的石子數,記爲該次合併的得分。 編一程序,由文件讀入堆數 N 及每堆的石子數(≤20), ① 選擇一種合併石子的方案, 使得做N-1次合併, 得分的總和最小; ② 選擇一種合併石子的方案, 使得做N-1次合併, 得分的總和最大. 例如, 圖 2-1 所示的4堆石子,每堆的石子數(從最上面的一堆數起, 順時針數) 依次爲4 5 9 4. 則 3 次合併得分總和最小的方案爲圖2-2,得分總和最大的方案 爲圖 2-3. (加圖) 輸入數據: 文件名由鍵盤輸入,該文件內容爲; 第一行爲石子堆數 N; 第二行爲每堆的石子數, 每兩個數之間用一個空格符分隔 輸出數據: 輸出文件名爲 OUTPUT.TXT 第 1 至 N-1 行爲得分最小的合併過程. 每行包含兩個數, 表示應該合併的兩 堆石子的數目, 小數在前, 大數在後, 第 N 行爲合併成一堆後的最小得分總和; 第 N+1 行爲空行, 第 N+2 至 2N+1 行爲得分最大合併過程(格式同前). 第 2N+2 行爲最大得分總和.
73. (NOI'95.1_4) N 位由 0 和 1 組成的字符串 A、B 可分別表示爲 A=aNaN-1…ai…a2a1 B=bNbN-1…bi…b2b1 其中, ai=0或1, bi=0或1, 1≤i≤N, N≤15. 如果存在某一位j(j∈1…N), 在該位上兩串不同, 即aj≠bj, 而其餘N-1位 上的兩串相同, 即ai=bi(i∈1…N,i≠j), 則稱 A、B 兩串“互鄰”。 比如,在N=4時, A=1100, B=1000, A、B 兩串“互鄰”, 而 C=1100, D= 1010, C、D 兩串不“互鄰”。 編程要求: 尋找一個含有 2N 個上述01串的序列, 該序列滿足以下要求: ① 組成該序列的每一個01串都與其它串不同; ② 第k個串與第k-1個串有“互鄰”關係,2≤k≤2N; ③ 該序列首項由輸入指定. 例如 N=2, 指定首項爲01, 則一個滿足上述要求的序列爲 01 11 10 00 輸入數據 ┏━━━━━━┓ ┏━━━━━┓ 文件名由鍵盤輸入 ┃EXAMPLE4.TXT┃ ┃MODEL4.TXT┃ 該文件共有兩行 ┠──────┨ ┠─────┨ 第一行爲 N ┃2 ┃ ┃2 ┃ 第二行爲指定的序列首項 ┃01 ┃ ┃01 ┃ ┃ ┃ ┃11 ┃ 輸出數據 ┗━━━━━━┛ ┃10 ┃ 輸出文件爲 OUTPUT.TXT ┃00 ┃ 第一行爲 N ┃ ┃ 第二行至第2N+1行依次輸出序列的每一個串. ┗━━━━━┛ 輸入輸出舉例 參考輸入文件: EXAMPLE4.TXT 參考輸出文件: MODEL4.TXT
74. (NOI'95.1_5) m、n爲整數,且滿足下列兩個條件: ① m、n∈{1, 2, …, k}, (1≤k≤109) ② (n^2-m*n-m^2)^2=1 編一程序, 由鍵盤輸入k, 求一組滿足上述兩個條件的 m、n, 並且使m^2+n^2 的值最大. 例如, 若 k=1995, 則 m=987, n=1597 時, 則 m、n 滿足條件, 且可使 m^2+n^2的值最大.
75. (錢幣系統問題) 某錢幣系統由 k (k≤20) 種硬幣組成, 幣值依次爲 a[1], a[2],...,a[k], 其中 a[i] (i=1,2,...,k) 爲互不相同的正整數, 且依降序排列, a[1]≤200. 給定某整數幣值 n(n≤3000), 要求用最少枚數的硬幣表示這個幣值. 輸入: 用文件輸入已知數據, 格式爲: 第 1 行: k (硬幣種數) 第 2 行: a[1] a[2] ... a[k] (各幣值用空格隔開,已按降序排列好) 第 3 行: n (給定的幣值) 輸出: 直接在屏幕上輸出結果. 如果該錢幣系統無法表示幣值 n,應輸出'No', 否則按以下格式輸出: 第 1 行: 最少錢幣枚數 r. 第 2 行: 輸出若干形如 m*n 的表達式, m 爲幣值, n爲使用該幣值的枚數. 各式第 2 個因子之和應等於 r, 各式乘積之和應等於 n. 例: 設 (a[1],a[2],a[3])=(5,2,1), n=12, 則應輸出 3 5*2 2*1.
76. (省刻度尺問題)給定長度爲 L 的直尺, L 爲整數, 且L≤40. 爲了能一次直接 量出 1,2,...,L 的各種長度, 該尺內部至少要有多少條刻度 ? 請輸出最少刻度 數( 不含兩端點)及每個刻度的位置. 測量長度時可利用兩端點, 其位置分別爲 0, L. 輸入: 由鍵盤輸入 L. 輸出: 用文本文件按以下格式輸出結果(文件名: ANS2.TXT): 第 1 行: S ( 最少刻度數 ) 第 2 行: 尺內 S 個刻度的位置 第 3 行至第 L+2 行: 每行輸出 3 個用空格隔開的整數 t m n, 其中 1≤t≤L 爲要測量的各長度, m,n 依次爲該長度的起止刻度 (m<n). 例: 如果 L=6, 則一個正確的輸出是: 2 1 4 提示: (1) 最少刻度數 S 應滿足: 1 0 1 C[S+2,2]=(S+2)*(S+1)/2≥L. 2 4 6 (2) 除兩端點外, 第一個刻度可取爲 3 1 4 A[1]=1, 第二個刻度可在 1, L-2, L-1 這 4 0 4 三個數中選取. 5 1 6 6 0 6
|