实用算法配套练习基础题

合集下载

算法初步练习题及答案(ABC组)

算法初步练习题及答案(ABC组)

1a = 3b = a a b =+ b a b =- PRINT a ,bIF 10a < THEN 2y a =*else y a a =*第一章:算法初步[基础训练A 组] 一、选择题1.下面对算法描述正确的一项是:( )A .算法只能用自然语言来描述B .算法只能用图形方式来表示C .同一问题可以有不同的算法D .同一问题的算法不同,结果必然不同 2.用二分法求方程022=-x 的近似根的算法中要用哪种算法结构( )A .顺序结构B .条件结构C .循环结构D .以上都用 3.将两个数8,17a b ==交换,使17,8a b ==,下面语句正确一组是 ( )4.计算机执行下面的程序段后,输出的结果是( )A .1,3B .4,1C .0,0D .6,0 5.当3=a 时,下面的程序段输出的结果是( )A .9B .3C .10D .6二、填空题1.把求 2按从大到小进行排序时,经过第一趟排序后得到的新数列为 。

3.用“秦九韶算法”计算多项式12345)(2345+++++=x x x x x x f ,当x=2时的值的过程中,要经过 次乘法运算和 次加法运算。

4.以下属于基本算法语句的是 。

① INPUT 语句;②PRINT 语句;③IF-THEN 语句;④DO 语句;⑤END 语句; ⑥WHILE 语句;⑦END IF 语句。

5.将389化成四进位制数的末位是____________。

三、解答题1.把“五进制”数)5(1234转化为“十进制”数,再把它转化为“八进制”数。

2.用秦九韶算法求多项式x x x x x x x x f ++++++=234567234567)(当3=x 时的值。

3.编写一个程序,输入正方形的边长,输出它的对角线长和面积的值。

4.某市公用电话(市话)的收费标准为:3分钟之内(包括3分钟)收取0.30元;超过3分钟部分按0.10元/分钟加收费。

设计一个程序,根据通话时间计算话费。

算法初步练习题(附详细答案)

算法初步练习题(附详细答案)

算法初步练习题一、选择题:1.阅读下面的程序框图,则输出的S =A .14B .20C .30D .552.阅读图2所示的程序框图,运行相应的程序,输出的结果是A .1 B. 2 C. 3 D. 43.阅读右图所示的程序框图,运行相应的程序,输出的结果是A .2B .4C .8D .164.某程序框图如图所示,该程序运行后输出的k 的值是A .4B .5C .6D .75.执行右面的程序框图,输出的S 是3题 2题1题4题A .378-B .378C .418-D .4186.如图的程序框图表示的算法的功能是A .计算小于100的奇数的连乘积B .计算从1开始的连续奇数的连乘积C .从1开始的连续奇数的连乘积,当乘积大于100时,计算奇数的个数D .计算100531≥⨯⋅⋅⋅⨯⨯⨯n 时的最小的n 值.7.右图是把二进制数)2(11111化为十进制数的一个程序框图,判断框应填入的 条件是 A .4i > B .4i ≤ C .5i > D .5i ≤8.某程序框图如图所示,则该程序运行后输出的B 等于 A .15 B .29 C .31 D .635题6题9.如果执行右边的程序框图,输入2,0.5x h =-=,那么输出的各个数的和等于 A .3 B .3.5 C .4 D .4.510.某店一个月的收入和支出总共记录了N 个数据1a ,2,,N a a ⋅⋅⋅,其中 收入记为 正数,支出记为负数。

该店用右边的程序框图计算月总收入S 和月 净盈利V ,那么在图中空白的判断框和处理框中,应分别填入下列四个选项中 的A .0,A V S T >=-B .0,A V S T <=-C .0,A V S T >=+D .0,A V S T <=+ 11. 如图1所示,是关于闰年的流程,则 以下年份是闰年的为A .1996年B .1998年C .2010年D .2100年12. 某流程如右上图所示,现输入如下四个函数,则可以输出的函数是否y x =是 否 开始 0x <0y =x x h +=是结束1x <输入,x h否是1y =输出y2x ≥是开始1,0,0k S T ===i A a =输出,S V 1k k =+否 结束输入12,,,,N N a a a ⋅⋅⋅ T T A =+S S A =+N k <是否10题11题9题A .2)(x x f =B .xx f 1)(=C .62ln )(-+=x x x fD .x x f sin )(=二、填空题:13.程序框图(即算法流程图)如图所示,其输出结果是_______. 14.执行右边的程序框图,输出的T = .14题12题13题15.下面的程序框图表示的算法的结果是 1616.阅读右上面的流程图,若输入6,1a b ==,则输出的结果是 217右面的程序框图,如果输入三个实数a ,b ,c ,要求输出这三个数中最大的数,那么在空白的判断框中,应该填入下面四个选项中的 ①c x > ②x c > ③C .c b > ④b c >15题参考答案1.C .【解读与点评】当1=i 时, S =1;当i =2时, S =5;循环下去,当i =3时, S =14; 当i =4时,S =30;本试题考查了程序框图的运用.2.D 【解读与点评】本题考查是算法的重新框图与算法的语句识别.易错点是 不懂得运行顺序.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值3n =; 再返回运行第三次可得12112S ==-,然后赋值4n =,判断可知此时2S =,故输出4n =.故选D .3.C 【解读与点评】本题考查是算法的重新框图与算法的语句识别.考查学生 运算求解能力.本题的易错点是要注意是先赋值再输出.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值4n =; 再返回运行第三次可得12112S ==-,然后赋值8n =,判断可知此时2S =,故输出8n =. 4.A .【解读与点评】对于0,1,k s ==1k ∴=.对于1,3,2k s k ==∴=,则2,38,3k s k ==+∴=,后面是113,382,4k s k ==++∴=,不符合条件时输出 的4k =.此题是新课程新增容,考查了程序语言的概念和基本的应用,通 过对程序语言的考查,充分体现了数学程序语言中循环语言的关键. 9.B .【解读与点评】循环9次,对应输出值如下表。

学习算法的练习习题推荐

学习算法的练习习题推荐

学习算法的练习习题推荐在学习算法的过程中,练习习题是提高算法能力的重要途径。

通过不断地解决习题,可以加深对算法的理解,锻炼思维能力,提高解决问题的能力。

本文将推荐一些适合初学者和进阶者的算法练习习题,帮助读者提升算法能力。

一、基础算法习题1. 排序算法排序算法是算法学习的基础,掌握好排序算法对于理解其他算法也有很大帮助。

推荐习题:实现冒泡排序、插入排序、选择排序、快速排序等各种排序算法,并对它们的时间复杂度和空间复杂度进行分析。

2. 查找算法查找算法是在一组数据中寻找目标数据的算法。

推荐习题:实现二分查找算法,并分析其时间复杂度。

进阶习题:实现哈希表,并分析其查找操作的时间复杂度。

3. 字符串算法字符串算法是处理字符串的算法,包括字符串匹配、字符串编辑距离等。

推荐习题:实现朴素字符串匹配算法、KMP算法,并比较它们的效率差异。

进阶习题:实现最长公共子序列算法,并分析其时间复杂度。

二、数据结构习题1. 数组数组是最基本的数据结构之一,掌握好数组的使用对于解决问题非常重要。

推荐习题:实现动态数组,包括插入、删除、查找等操作。

进阶习题:实现稀疏数组,节省空间存储稀疏矩阵。

2. 链表链表是常用的数据结构,了解链表的特点和操作对于理解其他数据结构也有帮助。

推荐习题:实现单链表、双向链表,并实现插入、删除、查找等操作。

进阶习题:实现循环链表,并分析其应用场景。

3. 栈和队列栈和队列是常用的数据结构,用于解决特定的问题。

推荐习题:实现栈和队列的基本操作,包括入栈、出栈、入队、出队等。

进阶习题:使用栈实现队列,使用队列实现栈,并分析其应用场景。

三、算法思想习题1. 贪心算法贪心算法是一种通过每一步的局部最优选择来达到全局最优的算法思想。

推荐习题:实现背包问题的贪心算法,并分析其优缺点。

进阶习题:实现霍夫曼编码的贪心算法,并分析其时间复杂度。

2. 动态规划动态规划是一种通过将问题分解为子问题,并保存子问题的解来解决复杂问题的算法思想。

算法基础期末考试题及答案

算法基础期末考试题及答案

算法基础期末考试题及答案一、选择题(每题2分,共20分)1. 算法的时间复杂度是指:A. 算法执行时间B. 算法执行的指令条数C. 算法执行所需的内存大小D. 算法执行时所需的数据量答案:B2. 在排序算法中,冒泡排序的平均时间复杂度是:A. O(n)B. O(n log n)C. O(n^2)D. O(1)答案:C3. 递归算法的基本原理是:A. 循环B. 迭代C. 分治D. 重复答案:C4. 哈希表的冲突解决方法不包括:A. 链地址法B. 开放寻址法C. 再散列法D. 排序答案:D5. 动态规划与分治算法的区别在于:A. 递归B. 贪心选择C. 重叠子问题D. 优化子结构答案:C6. 二叉树的深度优先搜索遍历方法包括:A. 前序遍历B. 中序遍历C. 后序遍历D. 所有选项答案:D7. 快速排序算法的最好时间复杂度是:A. O(n)B. O(n log n)C. O(n^2)D. O(log n)答案:B8. 图的广度优先搜索(BFS)使用的是:A. 栈B. 队列C. 链表D. 堆答案:B9. Dijkstra算法是用于解决:A. 最小生成树问题B. 最短路径问题C. 图的连通性问题D. 图的遍历问题答案:B10. 拓扑排序是针对哪种类型的图:A. 有向无环图B. 无向图C. 有向图D. 完全图答案:A二、简答题(每题5分,共30分)1. 请简述什么是贪心算法,并给出一个应用实例。

答案:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。

例如,在硬币找零问题中,总是优先使用最大面额的硬币进行找零。

2. 解释什么是二分查找算法,并说明其时间复杂度。

答案:二分查找算法是一种在有序数组中查找特定元素的搜索算法。

其基本思想是将数组分成两半,比较中间元素与目标值,如果目标值等于中间元素,则查找成功;如果目标值小于中间元素,则在左侧子数组中继续查找;如果目标值大于中间元素,则在右侧子数组中继续查找。

算法练习题-分章节-带答案

算法练习题-分章节-带答案

算法练习题-分章节-带答案一、选择题1、下面关于算法的描述,正确的是()A、一个算法只能有一个输入B、算法只能用框图来表示C、一个算法的执行步骤可以是无限的D、一个完整的算法,不管用什么方法来表示,都至少有一个输出结果2、一位爱好程序设计的同学,想通过程序设计解决“韩信点兵”的问题,他制定的如下工作过程中,更恰当的是()A、设计算法,编写程序,提出问题,运行程序,得到答案B、分析问题,编写程序,设计算法,运行程序,得到答案C、分析问题,设计算法,编写程序,运行程序,得到答案D、设计算法,提出问题,编写程序,运行程序,得到答案3、下面说法正确的是()A、算法+数据结构=程序B、算法就是程序C、数据结构就是程序D、算法包括数据结构4、衡量一个算法好坏的标准是()。

A、运行速度快B、占用空间少C、时间复杂度低D、代码短5、解决一个问题通常有多种方法。

若说一个算法“有效”是指()。

A、这个算法能在一定的时间和空间资源限制内将问题解决B、这个算法能在人的反应时间内将问题解决C、这个算法比其他已知算法都更快地将问题解决D、A和C6、算法分析中,记号O表示(),记号表示()。

A.渐进下界B.渐进上界C.非紧上界D.非紧下界7、以下关于渐进记号的性质是正确的有:()A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))B.f(n)O(g(n)),g(n)O(h(n))h(n)O(f(n))C.O(f(n))+O(g(n))=O(min{f(n),g(n)})D.f(n)O(g(n))g(n)O(f(n))8、记号O的定义正确的是()。

A.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0f(n)cg(n)};B.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0cg(n)f(n)};C.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有nn0有0f(n)D.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有nn0有:0cg(n)<f(n)};9、记号的定义正确的是()。

算法练习题

算法练习题

算法练习题一、基础算法1. 编写一个程序,实现一个冒泡排序算法。

2. 实现一个选择排序算法。

3. 实现一个插入排序算法。

4. 编写一个函数,计算一个整数数组中的最大值和最小值。

5. 编写一个函数,实现二分查找算法。

6. 编写一个函数,实现快速排序算法。

7. 编写一个函数,判断一个整数是否为素数。

8. 编写一个函数,实现反转一个整数数组。

9. 编写一个函数,计算两个整数数组的交集。

10. 编写一个函数,判断一个字符串是否为回文。

二、数据结构11. 实现一个单链表的基本操作,包括插入、删除、查找。

12. 实现一个双向链表的基本操作,包括插入、删除、查找。

13. 实现一个栈的基本操作,包括压栈、出栈、查看栈顶元素。

14. 实现一个队列的基本操作,包括入队、出队、查看队首元素。

15. 实现一个二叉树的基本操作,包括插入、删除、查找。

16. 实现一个二叉搜索树的基本操作,包括插入、删除、查找。

17. 实现一个哈希表的基本操作,包括插入、删除、查找。

三、搜索与图论18. 编写一个程序,实现深度优先搜索(DFS)算法。

19. 编写一个程序,实现广度优先搜索(BFS)算法。

20. 编写一个程序,求解迷宫问题。

21. 编写一个程序,计算一个有向图的拓扑排序。

22. 编写一个程序,计算一个无向图的欧拉回路。

23. 编写一个程序,计算一个加权无向图的最小树(Prim算法)。

24. 编写一个程序,计算一个加权有向图的最短路径(Dijkstra算法)。

25. 编写一个程序,计算一个加权有向图的所有顶点对的最短路径(Floyd算法)。

四、动态规划26. 编写一个程序,实现背包问题。

27. 编写一个程序,计算最长公共子序列(LCS)。

28. 编写一个程序,计算最长递增子序列(LIS)。

29. 编写一个程序,实现编辑距离(Levenshtein距离)。

30. 编写一个程序,实现硬币找零问题。

31. 编写一个程序,实现矩阵链乘问题。

算法测试题

算法测试题

算法测试题一、选择题1. 以下哪个不是排序算法?A. 冒泡排序B. 快速排序C. 深度优先搜索D. 归并排序2. 在二叉树中,深度为2的节点有多少个?A. 1B. 2C. 4D. 无法确定3. 动态规划通常用于解决以下哪种问题?A. 线性问题B. 组合问题C. 排序问题D. 搜索问题4. 哈希表的主要时间复杂度是:A. O(1)B. O(log n)C. O(n)D. O(n^2)5. 在图论中,Dijkstra算法用于解决以下哪种问题?A. 最短路径问题B. 最大流问题C. 最小生成树问题D. 拓扑排序问题二、简答题1. 解释什么是贪心算法,并给出一个实际应用的例子。

2. 描述快速排序算法的基本思想,并简述其时间复杂度。

3. 什么是递归?请给出一个递归函数的示例,并解释其工作原理。

三、编程题1. 编写一个函数,实现冒泡排序算法,并对一个整数数组进行排序。

输入:`[5, 3, 8, 4, 2]`输出:一个按升序排列的数组。

2. 实现一个函数,使用深度优先搜索(DFS)遍历一个无向图,并返回所有顶点的遍历顺序。

3. 给定一个字符串,请编写一个函数来检查它是否是回文,忽略空格、标点符号和大小写。

4. 编写一个函数,实现Dijkstra算法,找到图中单个源点到所有其他顶点的最短路径。

5. 给定一个整数数组,请实现一个函数来找到最长递增子序列的长度。

四、分析题1. 比较和分析快速排序和归并排序的时间复杂度,并讨论它们在实际应用中的优缺点。

2. 解释动态规划与分治算法的区别,并给出一个动态规划问题的例子,说明其解决方案。

五、开放性问题1. 如何使用算法来解决实际生活中的优化问题?请给出一个具体的例子,并描述你将如何设计算法来解决它。

2. 在处理大数据集时,算法的选择对性能有何影响?请讨论并给出一个大数据集处理的算法选择示例。

请注意,以上题目仅供测试使用,具体实现和解答需要根据实际编程语言和环境进行调整。

高中数学 第一章 算法初步基础训练题 新人教A版必修3

高中数学 第一章 算法初步基础训练题 新人教A版必修3

一、选择题(本大题共12小题,每小题3分,共36分) 1.算法的三种基本结构是( )A .顺序结构、条件结构、循环结构B .顺序结构、循环结构、模块结构C .顺序结构、模块结构、条件结构D .模块结构、条件结构、循环结构 2.用二分法求方程022=-x 的近似根的算法中要用哪种算法结构( )A .顺序结构B .条件结构C .循环结构D .以上都用 3.给出一个算法bc ad dc b a -=,那么4231的值等于( )A .-2B .-1C .1D .24.将两个数8,17a b ==交换,使17,8a b ==,下面语句正确一组是 ( )5.下列给出的赋值语句中正确的是( )A .4M =B .M M =-C .3B A ==D .0x y +=6.给出以下四个问题,①x , 输出它的相反数. ②求面积为6的正方形的周长.③求三个数,,a b c 中输入一个数的最大数.④求函数1,0()2,0x x f x x x -≥⎧=⎨+<⎩的函数值. 其中不需要用条件语句来描述其算法的有 ( )A. 1个B. 2个C. 3个D. 4个7.用“辗转相除法”求得459和357的最大公约数是( ) A .3 B .9 C .17 D .518.当2=x 时,下面的程序段结果是 ( )A .3B .7C .15D .179.计算机执行下面的程序段后,输出的结果是( ) A .1,3 B .4,1 C .0,0 D .6,0 10.当3=a 时,下面的程序段输出的结果是( ) A .9 B .3 C .10 D .6 11.右边程序执行后输出的结果是( )A.1- B .0 C .1 D .212. 右边程序运行后输出的结果为( )A. 50B. 5C. 25D. 0二、填空题(本大题共6小题,每小题4分,共24分)13.用“秦九韶算法”计算多项式12345)(2345+++++=x x x x x x f ,当x=2时的值的过程中,要经过 次乘法运算和 次加法运算.14. 二进制数111.11转换成十进制数是_________________.15.下列各数)9(85、)6(210、)4(1000、)2(111111中最小的数是___________. 16.下图给出的是计算201614121++++ 的值的一个流程图,其中判断框内应填入的条件是____________。

算法练习题-2

算法练习题-2

算法练习题-2一、选择题1、下列哪些问题不能用贪心法求解?A)霍夫曼编码问题B)单源最短路径问题C)0-1背包问题D)最小生成树问题()2、二分搜索算法是利用()实现的算法。

A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是(A)。

A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解4.下列算法中通常以自底向上的方式求解最优解的是()。

A、备忘录法B、动态规划法C、贪心法5、衡量一个算法好坏的标准是()。

A运行速度快B占用空间少C时间复杂度低D代码短6.最长公共子序列算法利用的算法是()。

A、分支界限法B、动态规划法C、贪心法D、回溯法7.下面是贪心算法的基本要素的是()。

A、重叠子问题B、构造最优解C、贪心选择性质8、下面关于NP问题说法正确的是()ANP问题都是不可能解决的问题BP类问题包含在NP类问题中CNP完全问题是P类问题的子集DNP类问题包含在P类问题中D、定义最优解D、回溯法9下列哪些问题是典型的NP完全问题:A.排序问题B.n-后问题C.m-着色问题D.旅行商问题10.()是贪心算法与动态规划算法的共同点。

A、重叠子问题B、构造最优解C、贪心选择性质D、最优子结构性质11.矩阵连乘问题的算法可由(B)设计实现。

A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法12、下面问题()不能使用贪心法解决。

A单源最短路径问题B活动选择问题C最小花费生成树问题D最优二叉搜索树问题13.实现合并排序利用的算法是()。

A、分治策略B、动态规划法B、构造最优解C、贪心法D、回溯法D、子问题14.下列是动态规划算法基本要素的是()。

A、定义最优解重叠性质A、最优子结构C、算出最优解15.贪心算法与动态规划算法的主要区别是()。

B、贪心选择性质C、构造最优解D、定义最优解16.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的()。

A、重叠子问题B、最优子结构性质C、贪心选择性质D、定义最优解17.实现最长公共子序列利用的算法是(B)。

经典算法练习题

经典算法练习题

经典算法练习题算法是计算机科学中的重要概念,它是解决问题的一系列步骤或规则。

在计算机编程中,经典算法是程序员经常使用的一种算法。

通过练习经典算法,可以增强程序员的逻辑思维能力,并提高解决问题的效率和准确性。

本文将介绍几个经典算法练习题。

题目一:冒泡排序算法实现冒泡排序是一种基本的排序算法,它通过多次比较和交换来实现排序。

具体步骤如下:1. 从待排序的第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置;2. 继续比较下一对元素,直到没有任何一对元素需要交换为止;3. 重复上述步骤,直到所有元素都排好序为止。

题目二:二分查找算法实现二分查找算法也被称为折半查找算法,它是一种高效的查找算法。

它的前提是待查找的数据已经排好序。

具体步骤如下:1. 首先,确定待查找数据的左边界和右边界;2. 计算待查找数据的中间位置,并将中间位置数据与目标数据进行比较;3. 如果中间位置数据等于目标数据,查找成功;4. 如果中间位置数据大于目标数据,修改右边界为中间位置减1,并回到第二步继续查找;5. 如果中间位置数据小于目标数据,修改左边界为中间位置加1,并回到第二步继续查找;6. 重复上述步骤,直到找到目标数据或者左边界大于右边界为止。

题目三:递归算法实现递归算法是一种自己调用自己的算法。

它通常用于解决可以被分解为重复子问题的问题。

递归算法的实现包括两个关键要素:递归基和递归式。

1. 递归基:确定递归结束的条件,即最简单的情况;2. 递归式:将原问题转化为更小规模的问题,并通过调用自身解决该小规模问题。

题目四:动态规划算法实现动态规划算法是一种将复杂问题分解为多个重叠子问题的算法。

通过解决子问题并将结果保存在一个表中,可以避免重复计算,提高效率。

动态规划算法的实现包括以下步骤:1. 确定状态:将原问题分解为若干子问题,通过定义状态表示子问题;2. 确定状态转移方程:描述当前状态与下一个状态之间的关系;3. 确定初始条件:确定递归出口的初始情况。

算法初步练习题

算法初步练习题

算法初步练习题一、基础算法1. 编写一个程序,实现两个整数的加法、减法、乘法和除法运算。

2. 实现一个函数,判断一个整数是否为素数。

3. 编写一个程序,计算斐波那契数列的前20项。

4. 实现一个冒泡排序算法,对一组数据进行升序排列。

5. 编写一个选择排序算法,对一组数据进行降序排列。

二、字符串处理1. 编写一个函数,实现字符串的反转。

2. 实现一个程序,判断两个字符串是否为回文串。

3. 编写一个函数,统计一个字符串中字母、数字和其他字符的数量。

4. 实现一个程序,将字符串中的所有空格替换为指定的字符。

5. 编写一个函数,查找字符串中某个子串出现的次数。

三、数组与矩阵1. 编写一个程序,输出一个二维数组中的对角线元素。

2. 实现一个函数,计算一个二维数组的鞍点(即该位置上的元素在其所在行最大、所在列最小)。

3. 编写一个程序,将一个二维数组进行转置。

4. 实现一个函数,找出一个数组中的众数(出现次数最多的元素)。

5. 编写一个程序,对一组数据进行快速排序。

四、查找与排序1. 实现一个二分查找算法,在有序数组中查找一个指定的元素。

2. 编写一个程序,使用插入排序算法对一组数据进行排序。

3. 实现一个希尔排序算法,对一组数据进行排序。

4. 编写一个程序,使用归并排序算法对一组数据进行排序。

5. 实现一个基数排序算法,对一组整数进行排序。

五、递归与分治1. 编写一个递归函数,计算阶乘。

2. 实现一个递归函数,求解汉诺塔问题。

3. 编写一个递归函数,计算斐波那契数列的第n项。

4. 实现一个分治算法,求解最大子段和问题。

5. 编写一个递归函数,输出一个整数的所有因子。

六、贪心算法1. 编写一个程序,使用贪心算法求解背包问题。

2. 实现一个贪心算法,求解最小树问题。

3. 编写一个程序,使用贪心算法求解哈夫曼编码问题。

4. 实现一个贪心算法,求解最优装载问题。

5. 编写一个程序,使用贪心算法求解活动选择问题。

七、动态规划1. 编写一个程序,使用动态规划求解最长公共子序列问题。

算法初步练习题(附详细标准答案)

算法初步练习题(附详细标准答案)

算法初步练习题一、选择题:1.阅读下面的程序框图,则输出的S =A .14B .20C .30D .552.阅读图2所示的程序框图,运行相应的程序,输出的结果是A .1 B. 2 C. 3 D. 43.阅读右图所示的程序框图,运行相应的程序,输出的结果是A .2B .4C .8D .164.某程序框图如图所示,该程序运行后输出的k 的值是A .4B .5C .6D .75.执行右面的程序框图,输出的S 是3题 2题1题4题A .378-B .378C .418-D .4186.如图的程序框图表示的算法的功能是A .计算小于100的奇数的连乘积B .计算从1开始的连续奇数的连乘积C .从1开始的连续奇数的连乘积,当乘积大于100时,计算奇数的个数D .计算100531≥⨯⋅⋅⋅⨯⨯⨯n 时的最小的n 值.7.右图是把二进制数)2(11111化为十进制数的一个程序框图,判断框内应填入的 条件是A .4i >B .4i ≤C .5i >D .5i ≤8.某程序框图如图所示,则该程序运行后输出的B 等于 A .15 B .29 C .31 D .635题6题9.如果执行右边的程序框图,输入2,0.5x h =-=,那么输出的各个数的和等于 A .3 B .3.5 C .4 D .10.某店一个月的收入和支出总共记录了N 个数据1a ,2,,N a a ⋅⋅⋅,其中 收入记为 正数,支出记为负数。

该店用右边的程序框图计算月总收入S 和月 净盈利V ,那么在图中空白的判断框和处理框中,应分别填入下列四个选项中 的A .0,A V S T >=-B .0,A V S T <=-C .0,A V S T >=+D .0,A V S T <=+ 11. 如图1所示,是关于闰年的流程,则 以下年份是闰年的为A .1996年B .1998年C .2010年D .2100年12. 某流程如右上图所示,现输入如下四个函数,则可以输出的函数是否y x =是 否开始 0x <0y =x x h +=是结束1x <输入,x h否是1y =输出y2x ≥是开始1,0,0k S T ===i A a =输出,S V 1k k =+否 结束输入12,,,,N N a a a ⋅⋅⋅ T T A =+S S A =+N k <是否10题11题9题A .2)(x x f =B .xx f 1)(=C .62ln )(-+=x x x fD .x x f sin )(=二、填空题:13.程序框图(即算法流程图)如图所示,其输出结果是_______. 14.执行右边的程序框图,输出的T = .15.下面的程序框图表示的算法的结果是 1612题13题16.阅读右上面的流程图,若输入6,1a b ==,则输出的结果是 217右面的程序框图,如果输入三个实数a ,b ,c ,要求输出这三个数中最大的数,那么在空白的判断框中,应该填入下面四个选项中的 ①c x > ②x c > ③C .c b > ④b c >15题参考答案1.C .【解读与点评】当1=i 时, S =1;当i =2时, S =5;循环下去,当i =3时, S =14; 当i =4时,S =30;本试题考查了程序框图的运用.2.D 【解读与点评】本题考查是算法的重新框图与算法的语句识别.易错点是 不懂得运行顺序.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值3n =; 再返回运行第三次可得12112S ==-,然后赋值4n =,判断可知此时2S =,故输出4n =.故选D .3.C 【解读与点评】本题考查是算法的重新框图与算法的语句识别.考查学生 运算求解能力.本题的易错点是要注意是先赋值再输出.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值4n =; 再返回运行第三次可得12112S ==-,然后赋值8n =,判断可知此时2S =,故输出8n =. 4.A .【解读与点评】对于0,1,k s ==1k ∴=.对于1,3,2k s k ==∴=,则2,38,3k s k ==+∴=,后面是113,382,4k s k ==++∴=,不符合条件时输出 的4k =.此题是新课程新增内容,考查了程序语言的概念和基本的应用,通 过对程序语言的考查,充分体现了数学程序语言中循环语言的关键. 9.B .【解读与点评】循环9次,对应输出值如下表。

基础算法训练题(二)

基础算法训练题(二)

基础算法训练题(二)下午2::00至4:40注意事项1.务必看清题目,严格按照所要求的格式输入、输出。

2.在调试程序时请先使用题目中的示例数据,然后再自行设计多组测试数据进行调试。

3.测试有严格的时间限制,请尽可能优化算法。

4.命名规则:(1)每题都规定了该题的英文名称。

(2)程序文件和数据文件的主文件名都是该题的英文名字。

(3)程序文件扩展名采用语言环境的默认扩展名。

(4)数据文件都是文本文件,输入和输出文件的扩展名分别是.in和.out。

5.程序应从输入文件读取数据,并严格地按照规定的输出格式将结果输出到输出文件中。

输入数据文件和输出数据文件都与程序在同一个目录中,由于程序所在目录是不确定的,因此不允许在程序中含有盘符信息和任何形式的路径信息。

6.请大家将完成的源程序放入到以自己名字命名的文件夹中,并且打包提交。

测试以评测组编译的可执行文件为准,测试系统使用的是标准的编译指令处理源程序,没有附加任何编译选项,请选手按照考试机器上语言环境的默认配置来编译调试自己的程序。

7.不同程序设计语言的文件扩展名请使用默认的扩展名。

例如,PASCAL语言编写的源程序文件的扩展名应该为.pas;C语言编写的源程序文件的扩展名应该为.c;C++语言编写的源程序文件的扩展名应该为.cpp。

题目:题1查找(find)【问题描述】中考成绩出来了,许多考生想知道自己成绩排名情况,于是考试委员会找到了你,让你帮助完成一个成绩查找程序,考生只要输入成绩,即可知道其排名及同名次的人有多少【输入格式】第一行一个数N;第二行一个数K;第三行开始N个以空格隔开的所有学生中考成绩(可能是无序的)。

接着K个待查找的考生成绩。

【输出格式】K行,每行为一个待查找的考生的名次、同名次的人数、比考生高分的人数。

查找不到输出“fail!”。

【输入样例】102580 570 565 564 564 534 534 534 520 520564 520【输出样例】4 2 36 2 8数据规模(1<=N<=100000,1<=k<=10000),题2 Victoria的舞会(Vic1to)【问题描述】Victoria是一位颇有成就的艺术家,他因油画作品《我爱北京天安门》闻名于世界。

实用算法配套练习基础题

实用算法配套练习基础题

实用算法配套练习第一章基础题1、陶陶摘苹果【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。

苹果成熟的时候,陶陶就会跑去摘苹果。

陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。

假设她碰到苹果,苹果就会掉下来。

【输入文件】输入文件apple.in。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100 到120 之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

【输出文件】输出文件apple.out 包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

【样例输入】100 200 150 140 129 134 167 198 200 111110【样例输出】52、不高兴的津津(unhappy.pas)【问题描述】津津上初中了。

妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。

另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。

但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。

假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。

请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入文件】输入文件unhappy.in 包括七行数据,分别表示周一到周日的日程安排。

每行包括两个小于10 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出文件】输出文件unhappy.out 包括一行,这一行只包含一个数字。

如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。

算法入门习题108道

算法入门习题108道

算法⼊门习题108道本题库来源:⼤榕树论坛/doc/76b6538d6529647d272852c1.html ⼊门习题⼀百道。

字符串处理1.读⼊N个字母的字,判断该字是否回⽂。

2.有N组数据,每组中有M个字串,找出所有符合下列条件的字串S,条件是:在每⼀组中,字串S都是其M个字串之⼀。

3.读⼊⼀个字串(长度不⼤于50),删去字串中相同的字符。

4.输⼊⼗个字符串,长度在20….50之间。

检查每个字串,若遇到字母A,就在其后插⼀个空格,最后打印全部处理后的字串,并统计26个字母各出现多少次。

5.接受⼀个任意长度的字串(⼩于100个字符),将该字符串中的字符按照ASCII码表从⼩到⼤的顺序重新排列成⼀个新的字符串并打印出来。

6.有⼀段⽂字由若⼲字母组成。

检查⽂字中每个字母出现的次数,输出时,按字母出现频率的降序排序,并按以下格式打印(不含未出现字母):字母频率百分⽐%x x x7.读⼊⼀⾏⽂本,包含若⼲个单词(以空格间隔,以%j结尾)。

将其中以A开头的单词与以N结尾的单词,⽤头尾交换的⽅法予以置换。

8.求出⼀个⼦串在字符串中的位置。

9.在若⼲个字符串中,找出⼀个长度最长的公共字串。

10.’DOS’称为良序⼦串,因为他之中的字母是按ASCII码的顺序排列的,⽽’DATA’则不是良序字符。

先要求给出⼀个N*N的字母⽅阵,从中选出给定长度M的良序字符。

11.从键盘上读⼊⼀个字符串(称为原串),其长度不超过50个字符,并以字符’$’作为结束符。

当原串读⼊后,对原串进⾏编辑,其功能有(菜单选择):①在原串中制定的字符前⾯插⼊若⼲个字符(字串)。

若在原串中有若⼲个指定的字符,则插⼊在第⼀个指定字符的前⾯。

例:原串‘abcd dby’在指定字符‘b’的前⾯插⼊‘umv’,此时字符串成为‘auwvbc dby’②在原串中,删除指定的⼦串,若原串中有多个相同的⼦串,则删除最后⼀个⼦串。

例:原串‘abxyzw cdxyzh,uvxxyzh’删除⼦串’xyz’后得到:‘abxyzw cdxyzh,uvxh’③替换操作:在原串中,将某个⼦串⽤新的⼦串去替换。

基础算法案例题

基础算法案例题

基础算法案例题以下是一个基础算法案例题的示例:题目:给定一个整数数组,找出数组中两个数之和等于目标值的两个数的索引。

输入:nums = [2, 7, 11, 15], target = 9输出:[0, 1]解释:nums[0] + nums[1] = 2 + 7 = 9,所以返回[0, 1]。

解题思路:我们可以使用哈希表来解决这个问题。

遍历数组,对于每个元素,我们检查目标值减去该元素是否已经在哈希表中,如果存在,则说明找到了两个数之和等于目标值的两个数。

如果不存在,我们将当前元素加入哈希表中。

算法步骤:1. 创建一个空的哈希表。

2. 遍历数组,对于每个元素nums[i],计算target减去该元素的差值diff。

3. 在哈希表中查找差值diff是否存在,如果存在,则找到了两个数之和等于目标值的两个数,返回它们的索引i和哈希表中diff的值。

4. 如果差值diff不存在于哈希表中,则将当前元素加入哈希表中,索引为键,元素值为值。

5. 如果遍历结束仍然没有找到结果,说明数组中不存在两个数之和等于目标值的两个数。

示例代码(使用Python语言实现):def twoSum(nums, target):num_map = {}for i, num in enumerate(nums):diff = target - numif diff in num_map:return [num_map[diff], i]num_map[num] = ireturn []# 测试案例nums = [2, 7, 11, 15]target = 9print(twoSum(nums, target)) # 输出:[0, 1]。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实用算法配套练习第一章基础题1、陶陶摘苹果【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。

苹果成熟的时候,陶陶就会跑去摘苹果。

陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。

假设她碰到苹果,苹果就会掉下来。

【输入文件】输入文件apple.in。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100 到120 之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

【输出文件】输出文件apple.out 包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

【样例输入】100 200 150 140 129 134 167 198 200 111110【样例输出】52、不高兴的津津(unhappy.pas)【问题描述】津津上初中了。

妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。

另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。

但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。

假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。

请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入文件】输入文件unhappy.in 包括七行数据,分别表示周一到周日的日程安排。

每行包括两个小于10 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出文件】输出文件unhappy.out 包括一行,这一行只包含一个数字。

如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。

如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

【样例输入】5 36 27 25 35 40 40 6【样例输出】323、津津的储蓄计划(save.pas)【问题描述】津津的零花钱一直都是自己管理。

每个月的月初妈妈给津津300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年__________末她会加上20%还给津津。

因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如11月初津津手中还有83元,妈妈给了津津300元。

津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。

到了11月月末,津津手中会剩下3元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。

有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。

如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。

如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

【输入文件】输入文件save.in 包括12 行数据,每行包含一个小于350的非负整数,分别表示1月到12 月津津的预算。

【输出文件】输出文件save.out 包括一行,这一行只包含一个整数。

如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

【样例输入1】29023028020030017034050908020060【样例输出1】-7【样例输入2】290230280200300170330503908020060【样例输出2】15804、校门外的树【问题描述】某校大门外长度为L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米。

我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。

这些区域用它们在数轴上的起始点和终止点表示。

已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。

现在要把这些区域中的树(包括区域端点处的两棵树)移走。

你的任务是计算将这些树都移走后,马路上还有多少棵树。

【输入文件】输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M 之间用一个空格隔开。

接下来的M 行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

【输出文件】输出文件tree.out 包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

【样例输入】500 3150 300100 200470 471【样例输出】2985、灯的开关状态(Switch.pas)【问题描述】有N个灯放在一排,从1到N依次顺序编号。

有N个人也从1到N依次编号。

1号将灯全部关闭,2 将凡是2 的倍数的灯打开;3 号将凡是3 的倍数的灯作相反处理(该灯如为打开的,则将它关闭;如关闭的,则将它打开)。

以后的人都和3号一样,将凡是自己编号倍数的灯作相反处理。

编程实现:第N个人操作后,按顺序输出灯的状态。

(1-表示灯打开,0-表示灯关闭)【输入格式】输入:n,灯的个数【输出格式】输出:灯的状态,01序列,中间无空格。

【输入样例】Switch.in2【输出样例】Switch.out0146、谁拿了最多奖学金问题描述】某校的惯例是在每学期的期末考试之后发放奖学金。

发放的奖学金共有五种,获取的条件各自不同:1) 院士奖学金,每人8000元,期末平均成绩高于80 分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;2) 五四奖学金,每人4000元,期末平均成绩高于85 分(>85),并且班级评议成绩高于80 分(>80)的学生均可获得;3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。

例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

【输入文件】输入文件scholar.in 的第一行是一个整数N(1 <= N <= 100),表示学生的总数。

接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。

姓名是由大小写英文字母组成的长度不超过20 的字符串(不含空格);期末平均成绩和班级评议成绩都是0 到100 之间的整数(包括0 和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。

每两个相邻数据项之间用一个空格分隔。

【输出文件】输出文件scholar.out 包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。

如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。

第三行是这N个学生获得的奖学金的总数。

【样例输入】4YaoLin 87 82 Y N 0ChenRuiyi 88 78 N Y 1LiXin 92 88 N N 0ZhangQin 83 87 Y N 1【样例输出】ChenRuiyi9000287007、阶乘和【问题描述】已知正整数N(N<=100),设S=1!+2!+3!+...N!。

其中"!"表示阶乘,即N!=1*2*3*……*(N-1)*N,如:3!=1*2*3=6。

请编程实现:输入正整数N,输出计算结果S的值。

【输入样例】sum.in4【输出样例】sum.out3358、放球(Ball.pas)【问题描述】把m 个球放入编号为0,1,2,…,k-1 的k个盒中(m<2k)要求第i 个盒内必须放2i只球。

如果无法满足这一条件,就一个不放,求出放球的具体方案。

【输入样例】Ball.in5【输出样例】Ball.out0:11:02:49、角谷猜想(Tran.pas)【问题描述】在数学上,有一个称为角谷猜想(最早由日本数学家角谷静夫提出)的经典题,其内容是:“对任意的正整数n,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。

经过如此有限次运算后,总可以得到正整数值1”。

请你编一个程序,根据输入的正整数n,输出以上运算过程。

【输入格式】输入数据仅一行包含一个正整数n(2≤n≤100)。

【输出格式】一行输出一次运算的算式,算式中除了运算符号、等号及数字以外不包含其它任何字符。

【输入样例】train.in3【输出样例】train.out3*3+1=1010/2=55*3+1=1616/2=88/2=44/2=22/2=110、求级数和(SERIES.PAS)【问题描述】我们让计算机来做一道数学题:计算S = 1/1!+1/2!+1/3!+...+1/ N!(其中N! = 1*2*3*...* N)【输入格式】输入整数N (1≤N≤1000)。

【输出格式】输出S,四舍五入到15位小数。

【输入样例】3【输出样例】S = 1.666666666666667611、密码破译(PASSWORD.PAS)【问题描述】某组织欲破获一个外星人的密码,密码由一定长度的字串组成。

此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。

现在就请你编程找出能破译此密码的两个钥匙。

【输入格式】(PASSWORD.IN):输入文件第一行为钥匙的个数N(1≤N≤5000)输入文件第二行为密码的长度以下N行为每个钥匙的长度【输出格式】(PASSWORD.OUT):若无法找到破译此密码的钥匙,则输出文件仅1行0 。

相关文档
最新文档