易语言经典算法.doc

上传人:夺命阿水 文档编号:92967 上传时间:2025-07-10 格式:DOC 页数:43 大小:299.50KB
下载 相关 举报
易语言经典算法.doc_第1页
第1页 / 共43页
易语言经典算法.doc_第2页
第2页 / 共43页
易语言经典算法.doc_第3页
第3页 / 共43页
易语言经典算法.doc_第4页
第4页 / 共43页
易语言经典算法.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、易语言经典算法共43页第43页易语言经典算法1. 取所有质数2. 求最小公倍数3. 求最大公约数4. 汉诺塔5. 9X9乘法表6. 猫捉老鼠(筛选法)7. 水仙花数问题8. 计算组合9. 身份证升级15位升级到18位10. 用冒泡法排序数字11. 九宫计算12. 奶牛问题13. 求阶乘14. 折半查找15. 给歌手打分16. 航线设置17. 数字全排列18. 借书方案19. 求直角三角形20. 二分排序21. 抢3022. 求回文数23. 斐波那契数列(递推法)24. 分块查找25. 求帕斯卡三角(杨辉三角)26. 箱子问题(贪婪法)27. 寻找文件(递归法)28. 求最大公约数(递归法)29

2、 取不重复数(排除法)30. 拉丁方31. 波松瓦分酒32. 皇后问题33. 背包问题34. 角谷猜想35. 邮票组合36. 贮油点37. 分解质因数38. 任意进制转换(大数)39. 计算星期几(常用公式)40. 计算星期几(蔡勒公式)41. 猴子吃桃子42. 马踏棋盘43. 打鱼还是晒网44. 九位累进可除数45. 十进制转为二进制46. 九连环47. 找窃贼48. 哥德巴赫猜想49. 最小生成数50. 农夫过河51. 旅游最省钱路径52. 马克思手稿中的数学题53. 上楼梯(递归).e54. 上楼梯(非递归)55. 金额大小写转换56. 求一元二次方程的根(二分法)57. 数字与IP地

3、址间的转换58. 八皇后问题(回溯法)59. 求N阶幻方60. 计算分数的精确值61. 找零钱62. 求一元二次方程的根(公式法)63. 比赛日程(分治法)64. 两个有序数组的合并65. 统计投色子(2个)的结果66. 12小球问题67. 改进冒泡排序法68. 螺旋数组69. 射击环数70. 猜数字游戏71. 桶排序72. 造币厂问题73. 直接插入排序74. 搬砖75. 公车座位巧安排76. 韩信点兵(中国剩余定理)77. 黑洞数78. 矩阵相乘79. 螺旋矩阵问题(多循环法)80. 买水果问题81. 求平方根82. 求任意三角形面积83. 全排列问题(递推法)84. 怎样组合值最大85.

4、 取两数之间均匀分布的随机数算法:递归递推法分块查找筛选法枚举法冒泡法二分法贪婪法序号:001使用算法:筛选法问题:取N以内的所有质数数量并显示,问题描述:求N(N0)个自然数中的所有质数数量,并显示问题分析:先把所有质数以外的数,打上“1“的标志,最后搜索整型数组,找出值为0的个数, 就是质数的个数!备注: 易语言例程:001.取所有质数.e序号:002使用算法:循环检验问题:求最小公倍数问题描述:求任意个自然数的最小公倍数问题分析:我们只要认准一个数,先从自身开始和另一个数求余数比较,为0那么这个数就是最小公倍数,如果不为0,那么把这个数不断翻倍再比较。 备注: 易语言例程:002.求最小

5、公倍数.e序号:003使用算法:辗转相除法问题:求最大公约数问题描述:求任意个自然数的最大公约数问题分析:用辗转相除法求最大公约数用辗转相除法求两个数的最大公约数的步骤如下:先用小的一个数除大的一个数,得第一个余数;再用第一个余数除小的一个数,得第二个余数;又用第二个余数除第一个余数,得第三个余数;这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。例如求1515和600的最大公约数,第一次:用600除1515,商2余315;第二次:用315除600,商1余285;第三次:用285除315,商1余30;第四

6、次:用30除285,商9余15;第五次:用15除30,商2余0。1515和600的最大公约数是15。辗转相除法是求两个数的最大公约数的方法。如果求几个数的最大公约数,可以先求两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数。这样依次下去,直到最后一个数为止。最后所得的一个最大公约数,就是所求的几个数的最大公约数。备注: 易语言例程:003.求最大公约数.e序号:004使用算法:未知问题:汉诺塔问题描述:汉诺塔是一种古老的游戏,是指在一柱(设为“甲”柱)上从下向上依次放着从大到小的一叠盘子,要把该柱(“甲”柱)上的盘子全部搬到指定的柱上(设为“乙”柱),在搬运过程中,可以利用另外一根

7、柱子(设为“丙”柱)来协助搬移,要求在搬移过程中必须始终(即每搬一步后)保持每根柱上(“甲”、“乙”、“丙”柱)的盘子都是处于从大到小(从柱子下面至上面)依次排列的状态,试问怎样搬移盘子?最少需要搬几次才能把“甲”柱上的全部盘子移至“乙”柱?古印度梵教曾利用这种方法来推算宇宙末日之时间。问题分析:在移动的过程中,必须按照下述移动规则:1. 直径较小的圆盘永远置于直径较大的圆盘上。2. 圆盘可任意地由任何一个木椿移到其他的木椿上。3. 每一次仅能移动一个圆盘。用递归调用的方法求解。备注: 易语言例程:004.汉诺塔.e序号:005使用算法:未知问题:9X9乘法表问题描述:列出99乘法表问题分析:

8、被乘数和乘数都是从1-9依次递增1,到9后继续返回1重新递增!备注: 易语言例程:005.99乘法表.e序号:006使用算法:筛选法问题:猫捉老鼠(筛选法)问题描述:所谓筛选法就是从全集中将不合格的项全部删去,剩下的就是答案。30个只老鼠围成一圈,花猫从第一只开始数,数到5或5的倍数就吃掉,问最有后一个吃掉的应该是站在地几个位置上的老鼠?这是个经典问题,解法就是模拟整个过程,有点类似于循环队列。另外,为了程序上处理方便,可以假定所有老鼠都被吃掉,然后看一下最后一个被吃掉的是谁。另一处为了处理方便而采取的措施是pos的初始值设为-1.很多时候,对问题的问法稍作变动,或者将初始值、加减变量的位置稍

9、作调整,用程序处理起来会方便很多。备注:例程:006. 猫捉老鼠(筛选法).e序号:007使用算法:枚举法问题:水仙花数问题问题描述:在100-999这些三位数中,有些数本身等于它百位上数字的立方加上十位上数字的立方加上个位上数字的立方,这样的三位数叫水仙花数。那么现在我们就要来找出这些三位数。问题分析:“根据水仙花数的特点:我们只要将这些三位数按照下面的规律逐个比较就可以了。比如:的立方的立方的立方,那么这个数就是水仙花数。”备注: 易语言例程:007.水仙花数问题.e序号:008使用算法:递归问题:计算组合问题描述:找出从自然数1,2,. n中任取r个数的组合。例如n=5,r=3问题分析:

10、分析所列的10个组合,可用这样的递归思想来考虑慈和函数的算法,设子程序计算分组子程序(m,k) 即找出自然数1,2。m中任取k个数的所有组合。当组合的第一个数字选定时,其后面的数字是从余下的m-1个数中取k-1个数的所有组合。这就将求m个数中去r个数的组合问题转化成求m-1个数中取k-1数的组合。备注: 易语言例程:008.m选n(生成法).e序号:009使用算法:固定算法问题:身份证升级15位升级到18位问题描述:将个人旧身份证15位升级到18位问题分析:公式:(aiWi)(mod 11)公式中:i-表示号码字符从由至左包括校验码在内的位置序号;ai-表示第i位置上的号码字符值;Wi-示第i

11、位置上的加权因子,其数值依据公式Wi=2(n-1)(mod 11)计算得出。i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 a1Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1aiWi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1易语言例程:009.身份证升级15位升级到18位.e序号:010使用算法:冒泡法问题:用冒泡法排序数字问题描述:使用冒泡排序法按顺序排序一批数字问题分析:首先将第一个记录的关键字和

12、第二个记录的关键字进行比较,若为逆序,则交换两记录的值。然后比较第二个和第三个记录的关键字,依次类推,直至最后一个记录也进行过比较。上述过程称为第一趟冒泡排序,其结果是最大值被安置到最后一个记录的位置上。进行第二趟排序,对前N-1个记录进行同样的排序。依次类推,当进行完N-1趟排序后,所有记录有序排列。备注:易语言例程:010.冒泡排序.e序号:011使用算法:推导法问题:九宫计算问题描述:1到9九个数字任意组合成一个三行三列的九宫。使每行没列没一斜行的和都相同计算出有多少种结果。问题分析:用两层循环试探所有可能的组合如果合格则显示不合格则淘汰备注:易语言例程:011.九宫计算.e序号:012

13、使用算法:推导法问题:奶牛问题问题描述:一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛。 假设每次生的都是母牛,并且也遵守4年才生育并生母牛的原则。 问n年之后多少头牛?问题分析:因为初试奶牛已经1岁,可以将规律计算为:年数: 1 2 3 4 5 6 7 8 9 10奶牛年龄 2 3 4 5 6 7 8 9 10 11牛: 1 1 2 3 4 5 7 9 11 13通过上面规律可以推导出结果。备注:易语言例程:012. 奶牛问题.e序号:013使用算法:问题:求阶乘问题描述:输入一个整数,求出其阶乘。问题分析:0的阶乘等于1,1的阶乘等于1N的阶乘等于N乘以(N

14、1)的阶乘由此可以断定N的阶乘是1*2*3*4.(n-1)*n备注: 易语言例程:013. 阶乘计算.e序号:014使用算法:二分法问题:折半查找问题描述:10个篮子里分别放着10种好吃的(无重复)水果是按编号大小顺序放在110号篮子。怎样快速找到水果?问题分析:折半查找的基本思想:设查找元素储存在一个一维数组中,已经按关键字递增(或递减)的方式排列的情况下,可进行折半查找。其方法是:首先将要查的关键字值与数组中间位置上的记录的关键字比较.”1 若相等,则查找成功;2 若大于中间位置的关键字则说明要查记录只可能在后半段中,下一步应在后半部分再进行折半查找;3 若小于中间位置关键字说明要查记录

15、只可能在前半部分,下一步应该在前半部分再进行折半查找。逐步缩小范围直到查找成功或子表为空时失败为止。备注: 易语言例程:014.折半查找.e序号:015使用算法:求最大值,求最小值,求平均数问题:给歌手打分问题描述:在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。求了其中一个选手的最后得分。问题分析:要求出歌手的得分,首先将个评委的分数相加在一起,接着找出个评委中的最高分和最低分,将前面求出的和减去这个最高分和最低分,得出的结果再除以,最后的结果为歌手的得分。备注:这个问题的算法十分简单,但是要注意在程序中判断最

16、大、最小值的变量是如何赋值的。易语言例程:015.给歌手打分.e序号:016使用算法:求最大不下降序列问题:航线设置问题描述:美丽的莱茵河畔,每边都分布着N个城市,两边的城市都是唯一对应的友好城市,现需要在友好城市开通航线以加强往来.但因为莱茵河常年大雾,如果开设的航线发生交叉现象就有可能出现碰船的现象.现在要求近可能多地开通航线并且使航线不能相交!问题分析:用一个数组来存放对应的友好城市的代码和友好城市的对数,然后在规划时先从倒数第二个城市开始,找出可以设置的航线条数和下一条航线开始的城市,如果正在规划的城市的航线数大于已知的航线条数,则存储这个航线条数和城市的代码,这样一直找下去,把最多的

17、航线数都找出来,最后把最多的航线数和对应的友好城市显示出来。备注: 易语言例程:016.航线设置.e序号:017使用算法:回溯法问题:数字全排列问题描述:任意给出从1到N的N个连续的自然数,求出这N个自然数的各种全排列。如N=3时,共有以下6种排列方式:123,132,213,231,312,321。问题分析:数字不能重复,N由键盘输入(N b - c -ax y倒酒的规则如下:1) 按a - b - c -a的顺序;2) b倒空后才能从a中取3) c装满后才能向a中倒备注: 易语言例程:031.拉丁方.e 序号:032使用算法:递归法问题:皇后问题问题描述:国际象棋中皇后可以攻击所在行,列,

18、斜线上的每一个位置,按照此规则要在一个n*n的棋盘上放n个皇后使每一个皇后都不互相攻击。问题分析:(1) 引入1个数组模拟棋盘上皇后的位置皇后位置数组j=4,表示第j列,第皇后位置数组j行有皇后引入3个工作数组行数组k=1,表示第k行没有皇后右高左低数组k=1,表示第k条右高左低的斜线上没有皇后左高右低数组k=1,表示第k条左高右低的斜线上没有皇后观察棋盘找到规律同一右高左低的斜线上的方格,它们的行号和列号之和相等;同一左高右低的斜线上的方格,它们的行号和列号只差相等;开始时,所有行和斜线上都没有皇后,从第一列的第一行配置第一个皇后开始,在第m列的皇后位置数组m行放置了一个合理的皇后之后,准备

19、考察第m+1列时,在数组 行数组,右高左低数组,左高右低数组中为第m列,皇后位置数组m的位置设定有皇后标志如果按此放置位置得不到结果,则把当前列中有皇后标记改为无皇后标记。依次类推当在棋盘最后一列上也找到合适的位置后得到结果。通过上面规律可以推导出结果。备注: 易语言例程:032.皇后问题.e 序号:033使用算法:递归法问题:背包问题问题描述:随机出现十种物品,每个重量100千克以内。设定一个背包的载重上限,计算出一种装物品的方法使物品重量正好等于背包载重上限。问题分析:对每个物品考虑选择放入和不放入背包两种情况首先,考查物品被放入的情况,这种可能性当且仅当包含它不会超出背包上限时才是可行的

20、继续考查下一个物品。其次,还要考查物品不被放入背包的情况,这种可能性当且仅当不包含物品其它物品也能找到合理的组合。考查完物品后,继续考查下一个物品依次类推,最终找到一个合理组合或没有合理组合备注: 易语言例程:033.背包问题.e 序号:034使用算法:循环判断问题:角谷猜想问题描述:日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。问题分析:判断给定的一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数

21、后按照上面的法则继续演算,一直到结果变为,并且将每一步的运算过程和得到的新的自然数显示出来。通过上面规律可以推导出结果。备注: 易语言例程:034.角谷猜想.e 序号:035使用算法:穷举法问题:邮票组合问题描述:某人有四张3分的邮票和三张5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?问题分析:将问题进行数学分析,不同张数和面值的邮票组成的邮资可用下列公式计算: S=3*i+5*j 其中i为3分邮柰的张数,j为5分的张数 按题目的要求,3分的邮票可以取0、1、2、3、4张,5分的邮票可以取0、1、2、3张。采用穷举方法进行组合,可以求出这些不同面值不同张数的邮标组合后的邮资。

22、备注: 易语言例程:035.邮票组合.e 序号:036使用算法:递推法问题:贮油点问题描述:一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升。显然卡车一次是过不了沙漠的。因此司机必须设法在沿途建立几个储油点,使卡车能顺利穿越沙漠,试问司机如何建立这些储油点?每一储油点应存多少油,才能使卡车以消耗最少油的代价通过沙漠?问题分析:编程计算及打印建立的贮油点序号,各贮油点距沙漠边沿出发的距离以及存油量。No. Distance(k.m.) oil(litre)1 X X X X2 X X X X3 X X X X设disi 为第i个贮油点至终点(i=0)的距离;

23、oili 为第i个贮油点的存贮油量;我们可以用倒推法来解决这个问题。从终点向始点倒推,逐一求出每个贮油点的位置及存油量。从贮油点i向贮油点i+1倒推的策略是,卡车在点i和点i+1间往返若干次。卡车每次返回i+1处时正好耗尽500公升汽油,而每次从i+1出发时又必须装足500公升汽油。两点之间的距离必须满足在耗油最少的条件下使i点贮足i*500分升汽油的要求(0=i=n1)。具体地讲,第一个贮油点i=1应距终点i=0处500km且在该处贮藏500公升汽油,这样才能保证卡车能由i=1处到达终点i=0处这就是说 dis1=500 oil1=500;为了在i=1处贮藏500公升汽油,卡车至少从i=2处

24、开两趟满载油的车至i=1处。所以i=2处至少贮有2*500公升汽油,即oil2=500*2=1000。另外,再加上从i=1返回至i=2处的一趟空载,合计往返3次。三次往返路程的耗油量按最省要求只能为500公升 。即d12=500/3kmdis2=dis1+d12=dis1+500/3依此类推,为了在i=k处贮藏k*500公升汽油,卡车至少从i=k+1处开k趟满载车至i=k处,即oilk+1=k+1*500=oilk+500,加上从i=k处返回i=k+1的k-1趟返程空间,合计2k-1次。这2k-1次总耗油量按最省要求为500公升,即 dk,k+1=500/(2k-1)disk+1=disk+d

25、k,k+1=disk+500/(2k-1);通过上面规律可以推导出结果。备注: 易语言例程:036.贮油点.e 序号:037使用算法:循环判断问题:分解质因数问题描述:将一个正整数分解质因数问题分析:问题分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1) 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2) 如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。(3) 如果n不能被k整除,则用k+1作为k的值,重复执行第一步,循环求解。备注: 易语言例程:037.分解质因数.e 序号:038使用算法:

26、进制算法、文本分析问题:任意进制转换(大数)问题描述:将任意的一个正整数进行-进制之间的转换问题分析:利用易语言大数支持库,用文本分析的方法进行转换,注意不能用基本数据类型,不然数值过大就会溢出备注: 易语言例程:038.任意进制转换(大数).e 序号:039使用算法:常用公式问题:计算星期几问题描述:计算任何一天是星期几问题分析:最常见的公式:W = Y-1 + (Y-1)/4 - (Y-1)/100 + (Y-1)/400 + D Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。备注: 易语言例程:039.计算星期几(常用公式).e 序号:040使用算法:蔡勒公

27、式问题:计算星期几问题描述:计算任何一天是星期几问题分析:蔡勒(Zeller)公式w=y+y/4+c/4-2c+26(m+1)/10+d-1公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日; 代表取整,即只要整数部分。备注: 易语言例程:040.计算星期几(蔡勒公式).e序号:041使用算法:倒推法问题:猴子吃桃子问题描述:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一

28、半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。问题分析:采取逆向思维的方法,从后往前推断。备注: 易语言例程:041.猴子吃桃子.e序号:042使用算法:贪心法问题:马踏棋盘问题描述:在8 8的国际象棋棋盘上,从任意指定的方格出发,为马寻找一条走遍棋盘每一格并且只经过依次的一条路径,如果找到请显示出来。问题分析:熟悉国际象棋的人都知道,马在某个方格,可以在一步内到达的不同位置最多有8个。 如图所示: #4#3# 5#0#2 6#1 #7#8# (1)对马走的方法可以设定一个顺序,如当前位置在棋盘的(i,j)方格,下一

29、个可能的位置依次为:(i+2,j+1),(i+1,j+2),(i-1,j+2),(i-2,j+1),(i-2,j-1),(i-1,j-2),(i+1,j-2),(i+2,j-1),实际可以走的位置很明显仅仅限于还未走过的和不越出边界的那些位置。 (2)这里我们定义马在一步内实际可以走的位置数为马在当前位置的出口数,此外,为便于程序的统一处理,这里引入两个数组 “行变化数组”和“列变化数组”,分别储存8种可能走法对马当前所在位置的横纵坐标的增量。 (3)本题用贪心法策略求解。 当马处于某一位置时,其选择下一位置的准则为:从马当前位置所允许走的位置中,选择出口数最少的哪个位置。如马的当前位置只有3

30、个出口,它们的出口数分别为4,2,3,则程序就选择出口数为2的那个出口。 算法简单描述 马从棋盘第一行第一列位置开始出发; 预设着法选择顺序控制变量“方法编号”为1; 循环判断首() 模拟棋盘数组初始化为0; 行号=起始行号;列号=起始列号; 计次循环首(63,当前遍历步数) 如果(马当前位置没有出口) 返回(-1) 否则 行号按返回方法改变;列号按返回方法改变。 在棋盘相对位置记录为第几步骤; 如果(找到解) 输出模拟棋盘数组; 终止循环; 否则 方法编号=方法编号+1; 循环判断尾(没有找到解) 上述算法在整个找解的过程一直向前,所以能非常快地找到解。但是对于某些开始位置,实际上有解可程序

31、第一次找不到解,则程序只要变换8中可能出口的顺序,就能找到解。考虑到这种变换8种方法的情况,程序引用“方法编号“用于控制8种可能走法的顺序。开始为1时不能找到解,就让方法编号加1,重新找解。备注: 易语言例程:042.马踏棋盘.e序号:043使用算法:求余数问题:打鱼还是晒网问题描述:中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。问题分析:根据题意可以将解题过程分为三步:1)计算从1990年1月1日开始至指定日期共有多少天;2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;3)根据余数判断他是在“打鱼”还是在“晒网”; 若余数为1,2,3,则他是在“打鱼” 否则是在“晒网” 在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下: 如果 (年能被4除尽 且 不能被100除尽)或 能被400除尽) 则 该年是闰年

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 数据结构与算法

宁ICP备18001539号-1