算法设计题集

上传人:xins****2008 文档编号:115493720 上传时间:2019-11-13 格式:DOC 页数:37 大小:218.50KB
返回 下载 相关 举报
算法设计题集_第1页
第1页 / 共37页
算法设计题集_第2页
第2页 / 共37页
算法设计题集_第3页
第3页 / 共37页
算法设计题集_第4页
第4页 / 共37页
算法设计题集_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《算法设计题集》由会员分享,可在线阅读,更多相关《算法设计题集(37页珍藏版)》请在金锄头文库上搜索。

1、算 法 设 计 题 集 第一章 算法初步 第一节 程序设计与算法 一、算法 算法是解决问题方法的精确描述,但是并不是所有问题都有算法,有些问题经研究可行,则相应有算法,但这并不是说问题就有结果。上述的“可行”,是指对算法的研究。 待解问题的描述 待解问题表述应精确、简练、清楚,使用形式化模型刻划问题是最恰当的。例如,使用数学模型刻划问题是最简明、严格的,一旦问题形式化了,就可依据相应严格的模型对问题求解。 算法设计 算法设计的任务是对各类具体问题设计良好的算法及研究设计算法的规律和方法。常用的算法有:穷举搜索法、递归法、回溯法、贪心法、分治法等。 算法分析 算法分析的任务是对设计出的每一个具体

2、的算法,利用数学工具,讨论各种复杂度,以探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法。 算法的复杂度分时间复杂度和空间复杂度。 时间复杂度:在运行算法时所耗费的时间为f(n)(即 n的函数)。 空间复杂度:实现算法所占用的空间为g(n)(也为n的函数)。 称O(f(n)和O(g(n)为该算法的复杂度。 二、程序设计 程序 程序是对所要解决的问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说,数据结构算法程序。 程序设计 程序设计就是设计、编制和调试程序的过程。 结构化程序设计 结构化程序设计是利用逐步求精的方法,按一套程式化的设计准则进行程序的设计。由这种方法

3、产生的程序是结构良好的。所谓“结构良好”是指: ()易于保证和验证其正确性; ()易于阅读、易于理解和易于维护。 按照这种方法或准则设计出来的程序称为结构化的程序。 “逐步求精”是对一个复杂问题,不是一步就编成一个可执行的程序,而是分步进行。 第一步编出的程序最为抽象; 第二步编出的程序是把第一步所编的程序(如过程、函数等)细化,较为抽象; 第i步编出的程序比第i-1步抽象级要低; 直到最后,第n步编出的程序即为可执行的程序。 所谓“抽象程序”是指程序所描述的解决问题的处理规则,是由那些“做什么”操作组成,而不涉及这些操作“怎样做”以及解决问题的对象具有什么结构,不涉及构造的每个局部细节。 这

4、一方法原理就是:对一个问题(或任务),程序人员应立足于全局,考虑如何解决这一问题的总体关系,而不涉及每局部细节。在确保全局的正确性之后,再分别对每一局部进行考虑,每个局部又将是一个问题或任务,因而这一方法是自顶而下的,同时也是逐步求精的。采用逐步求精的优点是: ()便于构造程序。由这种方法产生的程序,其结构清晰、易读、易写、易理解、易调试、易维护; ()适用于大任务、多人员设计,也便于软件管理。 逐步求精方法有多种具体做法,例如流程图方法、基于过程或函数的方法。 例求两自然数,其和是667,最小公倍数与最大公约数之比是120:1(例如(115,552) 、(232,435))。 解两个自然数分

5、别为m和667-m(2m 333)。 处理对象:m(自然数)、l(两数的最小公倍数)、g(两数的最大公约数)。 处理步骤:对m从到333检查l与g的商为120,且余数为0时,打印m与667-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(最小公

6、倍数)、gcd(最大公约数)的细化。 最大公约数问题是对参数a、b,找到一个数i能整除a与b,i就是gcd的函数值。 Function gcd(a,b:integer):integer; var i:integer; begin while a mod b 0 do begin i:=b; b:=a mod b; a:=i; end; gcd:=b; end; 而最小公倍数的计算是:若干个b之和,若能被a整除,则该和便是a、b的最小公倍数。 Function lcm(a,b:integer):integer; var i:integer; begin i:=b; while i mod a 0

7、 do i:=i+b; lcm:=i;end;算 法 设 计 题 集 第一章 算法初步 第二节 编程入门题例 编程入门题(一) 1、位数对调:输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的数。例如:Input 3 bit natrue data:234 n=432 解 1.先确定输入数n是否三位数,即n99且n99) and (n=0,则求面积:area= ,并输出area的值。 程序 PROGRAM hl; VAR a,b,c,s,x,area:real; BEGIN write(Input a,b,c:); readln(a,b,c); If (a0) and (b0) an

8、d (c0) and (a+bc) and (a+cb) and (b+ca) 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、模拟计算器:试编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。这里只考虑加()、减()、乘()、除()四种运算。 例:Input x,y:15 3 Input operator(+,-,*,/)

9、: 15.00+ 3.00= 18.00 例:Input x,y:5 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

10、); 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、念数字:编一个“念数字”的程序,它能让计算机完成以下工作:当你输入一个至99之间的数后,计算机就会用汉字拼音印出这个数的念结束。 例:Input data:35 SAN SHI WU 例:Input data:0 LING 如果输入的数不在到99之间,就印出“CUO LE”(错了),请求重新输入。 注:为了使不熟悉汉语拼音的同学也能做这个题,把“零,一,二,三,九,十”的拼音法写在下面。 零 LING 一 YI

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号