经典编程题,大家一起做

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值