餐巾可以通过三种方式获得:
(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.(游戏)游戏规则是:从空(N*N)
从棋盘开始(例如N=3),A和B轮流将棋子放置在棋盘上未被占据的格子中。
例如,A先下棋,他将棋子放在中心方格上。 然后轮到B放棋子,他将棋子放在方格内。
一行中间的一个正方形。 于是又轮到贾芳了,以此类推。 判定胜败的方法是:
如果玩家有 N 个棋子占据横行、竖列或对角线,则该玩家获胜; 如果
直到整个棋盘都被占满,无人获胜,则为平局。
┏──┯──┯──┓ ┏──┯──┯──┓ ┏──┯──┯──┓
┃││┃ ┃││┃ ┃│O│┃
┠─┼─┼─┨ ┠─┼─┼─┨ ┠─┼─┼─┨
┃││┃ ┃│X│┃ ┃│X│┃
┠─┼─┼─┨ ┠─┼─┼─┨ ┠─┼─┼─┨
┃││┃ ┃││┃ ┃││┃
┗´┷´┷´┛ ┗´┷´┷´┛ ┗´´┷´┷´┛
64、从键盘以字符串的形式输入两个高精度八进制正整数。 字符串长度小于255。
第一个数字是被除数,第二个数字是除数,进行高精度除法运算,并显示八进制表。
显示商和余数。
(见方案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
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。 N放在A上(N≤20)
直径相同的圆盘,从下到上用连续的小写字母a、b、c、...编号,这些圆盘
B之后,C向一个方向移动到D(即不允许从右向左移动)。 磁盘可暂存B、C。从密钥
盘输入N,前N个小写字母的排列,代表从下往上在D盘上的最终编队
到上面的磁盘序列。 请使用文本文件ANS2.TXT输出形成此排列的操作过程。
文件的每一行都是“k ML”形式的字母序列,其中 k 是磁盘编号,M 是 k
显示原始小节编号,L 是新小节编号。 或者直接在屏幕上输出“No”,表示无法生成这种排列。
示例: ┃ ┃ ┃ ┃
键盘输入: ┃ ┃ ┃ ┃
3d –╋ – ┃ ┃ ┃
acb c ┃ ┃ ┃ ┃ ┃ ┃
然后是正确的输出文件 b ┃ ┃ ┃
可以是:a ╋┃ ┃ ┃
cAB ┻─┻───┻───┻───┻─ύ️
ABCD
AD
光盘
CBD
71.(最长连接)设一个N×N的网格图案,N是3的倍数。图形中要求
存储 0 或 1。相邻的 1 可以连接成一条线。 连接方式可以是行或列;
同时约定一条连接线只能有一个起点和一个终点,图上的一个点最多只能被访问一次。
编程寻找最长的连接。 例如,当N=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→11
↓ ↑ ↓
1→1→1 1 1
↑ ↓
1←1←1
上述连接中,最长的连接是: 表示方法:
1 最大连接长度:LMAX=9
↓ 连接:(1,6)→(2,6)→
1→11 (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堆石子,每堆石子的数量(从顶堆开始顺时针计数)
顺序是4594。那么三个组合得分之和最小的方案如图2-2所示,得分之和最大的方案如图2-2所示。
对于图2-3。
(卡托)
输入数据:
通过键盘输入文件名,文件内容为;
第一行是石子堆的数量N;
第二行是每堆石子的数量,每两个数字之间用空格字符分隔。
输出数据:
输出文件名为.TXT
第1行到第N-1行是得分最小的合并过程。 每行包含两个数字,表示要合并的两个数字。
堆积的石子数量,小数在前,最大的在后,第N行为合并成堆后的最小总分;
第N+1行为空行,第N+2行至2N+1行为乐谱的最大合并过程(格式同前)。 2N+2线
该行为的最大得分总和。
73. (NOI'95.1_4) 由0和1组成的N位串A和B可以表示为
A=аNanaN-1…ai…а2а1
B=スbNスbN-1…bbi…b2スb1
其中,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,则满足上述要求的序列为
输入数据┏┏──────────┓┏──────────┓
文件名通过键盘输入┃.TXT┃┃.TXT┃
该文件有两行┠──────┨┠──────┨
第一行是 N ┃2 ┃┃2 ┃
第二行是指定序列的第一项 ┃01 ┃┃01 ┃
┃ ┃┃11 ┃
输出数据┗────────────┛┃10 ┃
输出文件为.TXT ┃00 ┃
第一行是 N ┃ ┃
第二行到2N+1行按顺序输出序列的每个字符串。 ┗──────────┛
输入和输出示例
参考输入文件:.TXT
参考输出文件:.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=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是使用该货币值的硬币数量。
每个方程的第二个因子之和应等于r,每个方程的乘积之和应等于n。
示例:假设(a[1],a[2],a[3])=(5,2,1),n=12,则应输出
5*22*1。
76、(节省刻度的问题)给定一把长度为L的尺子,L是整数,并且L≤40。 为了直接
要测量1、2、...、L的各种长度,尺子内部至少应该有多少个刻度? 请输出最小比例
每个刻度的数量(不包括两个端点)和位置。 测量长度时,可以使用位置为0的两个端点,
L。
输入:从键盘输入 L。
输出:将结果输出到文本文件中,格式如下(文件名:ANS2.TXT):
第 1 行:S(最小刻度数)
第 2 行:S 刻度在标尺内的位置
第3行到第L+2行:每行输出3个用空格分隔的整数tmn,其中
1≤t≤L为待测长度,m,n依次为长度的起止刻度(m例:若L=6,则正确输出为:
1 4 Tips: (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