`

算 法 设 计 题 集

阅读更多

 

 

第一章  算法初步

 

第一节  程序设计与算法

 

   

昵称:狂飞

QQ:18670340

MSN:zhaojun1717@hotmail.com

注意事项:本文均为作者个人编写如果纰漏

请给予指出,转载请标明出处

 

一、算法

    算法是解决问题方法的精确描述,但是并不是所有问题都有算法,有些问题经研究可行,则相应有算法,但这并不是说问题就有结果。上述的“可行”,是指对算法的研究。

    1.待解问题的描述

    待解问题表述应精确、简练、清楚,使用形式化模型刻划问题是最恰当的。例如,使用数学模型刻划问题是最简明、严格的,一旦问题形式化了,就可依据相应严格的模型对问题求解。

    2.算法设计

    算法设计的任务是对各类具体问题设计良好的算法及研究设计算法的规律和方法。常用的算法有:穷举搜索法、递归法、回溯法、贪心法、分治法等。

    3.算法分析

    算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论各种复杂度,以探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法。

    算法的复杂度分时间复杂度和空间复杂度。

     .时间复杂度:在运行算法时所耗费的时间为f(n)( n的函数)

     .空间复杂度:实现算法所占用的空间为g(n)(也为n的函数)。

    O(f(n))O(g(n))为该算法的复杂度。

 

    二、程序设计

    1.程序

    程序是对所要解决的问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说,数据结构+算法=程序。

    2.程序设计

    程序设计就是设计、编制和调试程序的过程。

    3.结构化程序设计

    结构化程序设计是利用逐步求精的方法,按一套程式化的设计准则进行程序的设计。由这种方法产生的程序是结构良好的。所谓“结构良好”是指:

    (1)易于保证和验证其正确性;

    (2)易于阅读、易于理解和易于维护。

    按照这种方法或准则设计出来的程序称为结构化的程序。

   “逐步求精”是对一个复杂问题,不是一步就编成一个可执行的程序,而是分步进行。

    .第一步编出的程序最为抽象;

    .第二步编出的程序是把第一步所编的程序(如过程、函数等)细化,较为抽象;

    .……

    .第i步编出的程序比第i-1步抽象级要低;

    .……

    .直到最后,第n步编出的程序即为可执行的程序。

    所谓“抽象程序”是指程序所描述的解决问题的处理规则,是由那些“做什么”操作组成,而不涉及这些操作“怎样做”以及解决问题的对象具有什么结构,不涉及构造的每个局部细节。

    这一方法原理就是:对一个问题(或任务),程序人员应立足于全局,考虑如何解决这一问题的总体关系,而不涉及每局部细节。在确保全局的正确性之后,再分别对每一局部进行考虑,每个局部又将是一个问题或任务,因而这一方法是自顶而下的,同时也是逐步求精的。采用逐步求精的优点是:

    (1)便于构造程序。由这种方法产生的程序,其结构清晰、易读、易写、易理解、易调试、易维护;

    (2)适用于大任务、多人员设计,也便于软件管理。

    逐步求精方法有多种具体做法,例如流程图方法、基于过程或函数的方法。

    []求两自然数,其和是667,最小公倍数与最大公约数之比是120:1(例如(115,552) 、(232,435)

    []两个自然数分别为m667-m(2m 333)

   处理对象:m(自然数)l(两数的最小公倍数)g(两数的最大公约数)。

   处理步骤:对m从2到333检查lg的商为120,且余数为0,打印m667-m

   第一层抽象程序:

    Program TwoNum;

    Var   m,l,g:integer;

    Begin  for  m:=2  to  333  do

      begin  l:=lcm(m,667-m);    {求最小公倍数}

      g:=gcd(m,667-m)    {求最大公约数}

      if  (l=g*120)and(l mod g=0)  then

          writeln(m:5,667-m:5);

      end;

    End.

    第二层考虑函数lcm(最小公倍数)、gcd(最大公约数)的细化。

    最大公约数问题是对参数ab,找到一个数i能整除abi就是gcd的函数值。

      Function  gcd(a,b:integer):integer;

      var  i:integer;   

      begin  for  i:=a  downto  1  do 

        if  not((a  mod  i=0)or(b  mod  i=0))  then  gcd:=i;

      end;

    而最小公倍数的计算是:若干个b之和,若能被a整除,则该和便是ab的最小公倍数。

      Function  lcm(a,b:integer):integer;

      var  i:integer;

      begin  i:=b;

        while  i  mod  a=0  do  i:=i+b;

        lcm:=i;

      end;


第二节  编程入门题例

 

编程入门题(一)

 

1、位数对调输入一个三位自然数,把这个数的百位与个位数对调,输出对

   调后的数。例如:Input 3 bit natrue data:234

                   n=432

    []1.先确定输入数n是否三位数,即n>99n<=999

        2.位数对调:n=abccba=x              

          ①百位数a=n整除100;②十位数b=(n-a*100)整除10;③个位数c=n除以10的余数;

3.得对调后的数:x=c*100+b*10+a             

[程序]                                       

{$I-} {输入的数据为整数}              

program Threebit; 

var x,n,a,b,c:INTEGER;                        

BEGIN write('Input 3 bit nature data:'); readln(n);                                                     

  IF (n>99) and (n<1000) then                  

    begin a:=n DIV 100;   {求百位数}

      b:=(n-a*100) DIV 10;{求十位数} 

      c:=n mod 10;        {求个位数}

      x:=c*100+b*10+a;    {得新数X}

      writeln('Number=',x:3);                     

    end

  ELSE writeln('Input error!');

END.                                             

2、求三角形面积给出三角形的三个边长为abc,求三角形的面积。

   提示:根据海伦公式来计算三角形的面积:

         S Area

[]1.输入的三角形三边长a,b,c要满足“任意两边长的和大于第三边长”。       

    2.按海伦公式计算:s=a+b+c/2x=s*(s-a)*(s-b)*(s-c)

       这时若x>=0,则求面积:area= ,并输出area的值。

[程序]

PROGRAM hl;

VAR a,b,c,s,x,area:real;

BEGIN

  write('Input a,b,c:');readln(a,b,c);

  If (a>0) and (b>0) and (c>0) and (a+b>c)and(a+c>b)and(b+c>a) Then

    Begin s:=(a+b+c)/2;  x:=s*(s-a)*(s-b)*(s-c);

      If x>=0 Then Begin Area:=SQRT(x);writeln('Area=',area:8:5); End;

    End

  Else writeln('Input error!')

END.

3、模拟计算器试编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。这里只考虑加(+)、减(-)、乘(*)、除(/)四种运算。

    例1:Input x,y15  3

          Input operator(+,-,*,/):

           15.00+ 3.00= 18.00

    例2:Input x,y5  0

          Input operator(+,-,*,/):

          divide is zero!

[]该题关键是判断输入的两数是作何种运算(由输入的运算符operator决定, 如'+''-''*''/'分别表示加、减、乘、除法的运算)。其中要进行除(/)运算时,要先进行合法性检查,即除数不能为0

[程序]

PROGRAM Oper;

Var x,y,n:real;

  operator:char;

Begin

  write('Input x,y:');readln(x,y);

  write('Input operator:');readln(operator);

  Case operator of

    '+':n:=x+y;      {加法运算}

    '-':n:=x-y;      {减法运算}

    '*':n:=x*y;      {乘法运算}

    '/':If y=0 then  {除法运算}

          begin writeln('Divide is zero!');halt;end

        Else n:=x/y;

    else begin writeln('Input operator error!');halt;end;

  End;

  writeln(x:6:2,operator,y:6:2,'=',n:6:2);

End.

4、念数字编一个“念数字”的程序,它能让计算机完成以下工作:当你输入一个0至99之间的数后,计算机就会用汉字拼音印出这个数的念结束。

例1:Input data:35

      SAN SHI WU

    例2:Input data:0

          LING

    如果输入的数不在0到99之间,就印出“CUO LE”(错了),请求重新输入。

    注:为了使不熟悉汉语拼音的同学也能做这个题,把“零,一,二,三,……,九,十”的拼音法写在下面。

      LING      YI      ER      SAN      SHI      WU

      LIU       QI      BA      JIU      SHI

[]输入数在099之间,若x为两位数则拆分为十位数、个位数。然后调用念

    数过程Readdigit用汉字拼音印出各位数(09)的念。

[程序]

{$I-}

Program NinShu;

Var x,a,b:Integer;

Procedure ReadDigit(n:Integer);{念数过程:n=09}

Begin

  Case n of

    0:write('LING ');

    1:write('YI ');

    2:write('ER ');

    3:write('SAN ');

    4:write('SHI ');

    5:write('WU ');

    6:write('LIU ');

    7:write('QI ');

    8:write('BA ');

    9:write('JIU ');

  End;

End; {ReadDigit}

 

Begin {main}

  Repeat write('Input data:');readln(x);

    if (x<0) or (x>99) then writeln('Cuo Le');

  Until (x>=0)and(x<=99);

  If (x>=0)and(x<=9) then ReadDigit(x) {调用念数过程}

    Else Begin a:=x DIV 10; b:=x mod 10;  {位数拆分}

      If a<>1 then ReadDigit(b)

      writeln(' Shi');

      if b<>0 then ReadDigit(b);

    End;

  writeln;

End.

5、数列找数:数组A(N)的各下标变量中N个互不相等的数,键盘输入正整数M(M≤N),要求打印数组中第M大的下标变量的值。

    例如:数组A10)的数据为:

A(1)

A(2)

A(3)

A(4)

A(5)

A(6)

A(7)

A(8)

A(9)

A(10)

 16

 57

 20

 19

 38

 41

 6

 13

 25

 32

运行结果:INPUT AN NUMBER:

              A(5)=38          (即第3大的数是A(5)=38

   []该题要从N个互不相等的数中找第M大的值。有以下两种解法:

 

解法一初始时:A数组存放N个互不相等的数;B数组用于存放数组A的下标。见下表一。

<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #c0c0c0; width: 31.5pt; padding-top: 0cm; heigh

下标值i

 1

 2

  3

 4

分享到:
评论

相关推荐

    算 法 设 计 题 集.rar

    算法设计涵盖了各种方法,包括分治策略、动态规划、贪心算法、回溯法、分支限界法等。这些方法在解决实际问题时,如数据排序、图论问题、搜索与优化问题等方面,都有着广泛的应用。 在这个题集中,我们可以预期找到...

    算 法 设 计 题 集.

    5. **回溯和剪枝**:在面对组合优化问题时,回溯法是一种有效的手段。通过递归和剪枝技术避免无效的搜索,提高求解效率。 6. **字符串处理**:ACM中常有字符串相关的题目,如模式匹配、最长公共子序列、编辑距离等...

    算 法 设 计 题 集 .rar

    5. **回溯法**:用于解决约束满足问题,如八皇后问题、N皇后问题、迷宫求解等。 6. **贪心算法**:通过每一步都做出局部最优的选择来求解问题,如活动安排问题、霍夫曼编码等。 在数据结构部分,读者将接触到以下...

    算法设计与应用(ACM)

    常见的算法包括但不限于穷举搜索法、递归法、回溯法、贪心法、分治法等。 3. **算法分析**:算法分析的主要目的是通过对设计好的算法进行数学分析,评估算法的时间复杂度和空间复杂度,进而判断该算法适用的场景或...

    【016期】SPSS多重响应分析(多选题).docx

    1. 【分析】--【多重响应】--【定义变量集】--将所有选项拖入【集合中的变量】--【变量编码方式】选择【二分法】,计数值设为 1--编辑【名称】--【添加】--【关闭】。 2. 【分析】--【多重响应】--【频率】--将定义...

    七年级下期数学++华师大版+++期末易错题+.doc

    6. **二元一次方程的整数解**:第6题询问二元一次方程x+3y=10的非负整数解,可以通过枚举法找出所有可能的整数对(x, y),其中x和y都是非负整数。 7. **不等式的解集**:第7题要求当1≤x≤2时,ax+2&gt;0恒成立,需要...

    完美版资料集0765《建筑给排水工程》复习思考题.docx

    14. 世界各国所采用的三种给水管道设计秒流量是确定方法是水力计算法、流量系数法、流量比例法。 15. 高层建筑给水系统竖向分区的基本形式有减压供水、分区并联供水、串联供水、竖向分区减压供水。 16. 消火拴设备是...

    2016造价工程师[土建]考试_其他玻璃模拟考试题.doc

    9. 成本计算估价法中,包装费的计取基数不包括设计费,选项D。 10. 这是一个财务计算问题,使用年金现值公式计算,答案为A,2059.99万元。 11. 世行的应急费中有一项可能动用也可能不动用的费用是不可预见准备金,...

    北邮计组期末试卷2011

    "北邮计组期末试卷2011" 本试卷涵盖了计算机组成原理的多个方面,包括计算机硬件的技术指标、存储器的组成和工作方式、中央处理器的结构和功能、指令执行和中断响应、补码和真值的表示、CISC 和 RISC 架构的特点、...

    届高三语文下学期第一次月考试题含解析.doc

    随着测绘技术和绘制技术的发展,中国地图的学术理论体系逐步形成,其中裴秀的“制图六体”理论和“计里画方”制图法尤为关键,它们对中国地图绘制产生了深远影响。 裴秀的“制图六体”理论指导了《禹贡地域图》的...

    电子商务设计师真题06年和07年

    此次根维据修需的求总阶费段用收,集记的录信在息委,托设书计中的。实体联系图(图 2-1 所示。图)和关系模式(不完整)如下 2-1 【概念结构中设业计务】员和维修工是员工的子实体。 图 2-1 【逻辑客结户构(设计】...

    2022版二级建造师《公路工程管理与实务》测试题I卷(附解析).pdf

    这篇文档是一份针对2022年二级建造师考试中《公路工程管理与实务》科目的测试题集,包含了解析。以下是其中涉及的部分知识点的详细解释: 1. **抛石挤淤施工**:这是一种用于处理软土地基的方法,适用于积水洼地和...

    java基础入门教程

    从 软 件的 设 计 风 格 、 设计 方 法 、 设 计 目 标 到 设 计 过 程 ,都 会 产 生 彻 底 的 变 革 ,"甚 至 会改 变 此 星 球 的 生活 方 式 "。 在 这 次 会 上 ,Java的 创 始 人 之 一 James Gosling 说 :...

    2021年R2移动式压力容器充装考试题库及R2移动式压力容器充装新版试题.docx

    此外,移动式压力容器的定期检验至关重要,如长管拖车和罐式集装箱的首次检验周期通常为3年,汽车罐车、铁路罐车和罐式集装箱的首次全面检验则应在投用后1年内进行。液氨是有毒气体,液化石油气主要成分为丙烷和丁烷...

    输气工理论试题以及答案.docx

    - 排污罐液位检测通常设有高、低报警值,以确保安全操作。 - 排污罐压力超高报警设定值一般为0.2MPa,超过此值需采取措施。 38. **截流截止放空阀设计特点**: - 采用硬质合金密封面,提高耐磨损性和耐腐蚀性。 ...

    南京工程学院-模电-期末复习卷及答案.pdf

    一、判断题 1. 在运算电路中,同相输入端和反相输入端均为“虚地”。这是错误的,因为同相输入端和反相输入端的电位不同。 2. 电压负反馈稳定输出电压,电流负反馈稳定输出电流。这是正确的,因为电压负反馈可以...

Global site tag (gtag.js) - Google Analytics