C语言入门必做习题100例(五)
C语言的学习其实很简单的,下面是我整理的关于C语言的试题,希望对C语言的初学者有所帮助!
1. (最长连线) 设有一个 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 连线的表示不是唯一的,仅给出一种即可。
2. (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
3. (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
4. (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的值最大.
5. (钱币系统问题) 某钱币系统由 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.
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |