论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C语言入门必做习题100例(五)

文章类别:C语言程序设计 | 发表日期:2009-6-24 9:30:32

 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.

6. (省刻度尺问题)给定长度为 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

7. 设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n ? 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n ? 1天内每个队都与不同的对手比赛。
例如n=2时的比赛安排:
    队         1  2            3  4
    比赛       1==2            3==4             一天
               1==3            2==4             二天
               1==4          2==3             三天

8.数制转换
    设有一个字符串A$的结构为:  A$=’m<n>p’
    其中m为数字串(长度<=20),而n,p均为1或2位的数字串(其中所表达的内容在2-10之间)。
    程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n进制),以p进制的形式输出。
    例如:A$=’48<10>8’
          其意义为:将10进制数48,转换成8进制数输出。
          输出结果为:48<10>=60<8>

9.挖地雷(30分)
    在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。

10.编码问题:
   设有一个数组A:ARRAY[0..N-1] OF INTEGER;
    数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
    
    例如:N=6时,有:             A=(4,3,0,5,1,2)
    此时,数组A的编码定义如下:
      A[0]的编码为0;
      A[i]的编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)
    ∴ 上面数组A的编码为:    B=(0,0,0,3,1,2)
    
   程序要求解决以下问题:
①    给出数组A后,求出其编码。
②    给出数组A的编码后,求出A中的原数据。

11.灯的排列问题:
    设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……Nk(k表示不同颜色灯的个数)。   
   放灯时要遵守下列规则:
①    同一种颜色的灯不能分开;
②    不同颜色的灯之间至少要有一个空位置。   
   例如:N=8(格子数)
         R=2(红灯数)
         B=3(蓝灯数)   
   放置的方法有:       
       R-B顺序

R    R        B    B    B        
R    R            B    B    B    
R    R                B    B    B
    R    R        B    B    B    
    R    R            B    B    B
        R    R        B    B    B
    
        B-R顺序

B    B    B        R    R        
B    B    B            R    R    
B    B    B                R    R
    B    B    B        R    R    
    B    B    B            R    R
        B    B    B        R    R

    放置的总数为12种。
    数据输入的方式为:
N
P1(颜色,为一个字母) N1(灯的数量)
P2                     N2
   ……
Q(结束标记,Q本身不是灯的颜色)
    程序要求:求出一种顺序的排列方案及排列总数。


12. 设有一个四层的积木块,1~4层积木块的数量依次为:5,6,7,8
    如下图所示放置:                       
                            
    8    15    8    5    16    9    14    
2    3    4    1    4    3    2    6

    其中,给出第三层与第四层所标示的数字,并已知第三层的数据是由第四层的数据计算出来的。
    计算的方法是:第三层的某个数据A是由第四层相邻的两个数据B,C经过某种计算后产生的:
    A    
B    C

    计算所用到的计算符为:+,-, ,且无优先级之分(自左向右计算),运算符最多为2个。
    如:3+4 5=35   5 4+3=23
    可以看出,上图中的第三层的数据是由第四层的数据用以下计算公式计算出来的:
A=B C+B
    也就是:8=2 3+2,15=3 4+3,……14=2 6+2
    程序要求:
    给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,并输出整个完整的积木图及计算公式。
①     输入数据不存在出错的情况,同时也不会超过整数的范围。
②     计算时可允许出现以下情况:
    A=B            (即可理解为运算符的个数为零)
    A=B B&not;&not;+B      (即全部由B产生)
V1               V 2             V3                       V4                         V5  

例如:
[题目要求]
当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。
    输入格式: N:                       (表示地窖的个数)
            W1,W2,W3,……WN     (表示每个地窖中埋藏的地雷数量)
                    A12…………… .     A1N      
                        A23…………..A2N        
                        ……..
                               AN-1  N
    
    输出格式:
      K1--K2--……….KV                  (挖地雷的顺序)
      MAX                            (挖地雷的数量)
例如:

       ⑩--------⑧    ④-----⑦-------⑥

其输入格式为:                   输出:
               5                        1  ?3  -4  -5
10,8,4,7,6            max=27
    1  1  1  0
       0  0  0
          1  1 
             1

13.砝码称重(30分)
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),
要求:
    输入方式:a1  a2  a3  a4  a5  a6
             (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)
    输出方式:Total=N
             (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)
如输入:1_1_0_0_0_0   (注:下划线表示空格)
  输出:TOTAL=3  表示可以称出1g,2g,3g三种不同的重量。

14. 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。
    例如:(13)10=(1101)2
        其中1的个数为3,0的个数为1,则称此数为A类数;
         (10)10=(1010)2
        其中1的个数为2,0的个数也为2,称此数为B类数;
         (24)10=(11000)2
        其中1的个数为2,0的个数为3,则称此数为B类数;
   程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数。

15.编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
   例如:N=6时,有:                   A=(4,3,0,5,1,2)
       此时,数组A的编码定义如下:
       A[0]的编码为0;
       A[i]的编码为:在A[0],A[1],……A[i-1]中比A[i]的值小的个数(i=1,2……N-1)
    ∴上面数组A的编码为:                B=(0,0,0,3,1,2)
    程序要求解决以下问题:
①    给出数组A后,求出其编码;
②    给出数组A的编码后,求出A中的原数据。


上一篇:{教程}C语言中简单的贪吃蛇程序 人气:4277
下一篇:{技巧}C语言中指针的奥秘 人气:3026
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058