信息学 (计算机) 奥林匹克训练题 (中级部分)
天津师范大学 李学武 编 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
|