![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计基础(python)实现
记录学习算法设计基础的点点滴滴
python小明
bug虐我千百遍,我待bug如初恋!
展开
-
真假小偷(python)实现
'''警察局抓了a,b,c,d,4名偷窃嫌疑犯,其中只有一人是小偷。审问中,a说:“我不是小偷。”,b说:“c是小偷。”,c说:“小偷肯定是d。”d说:“c在冤枉人。”现在已经知道4个人中3人说的真话,一人说的假话,问到底谁是小偷?问题分析: 将a,b,c,d4个人进行编号,号码为1,2,3,4。则问题可以用枚举方法尝试来解决。算法设计: 用变量x存放小偷的编号,则x的取值范围从1到4,就假设了他们中的某人是小偷的所有情况。4人所说的话: a:x != 1 or not x=1原创 2021-06-20 19:02:20 · 3370 阅读 · 0 评论 -
求任意三个数的最小公倍数(python)实现
'''编写算法,求任意3个数的最小公倍数算法设计: 短除法 1、用短除法求3个已知数的最小公倍数的过程就是求他们的因数之积,这个因数可能是3个数共有的、两个数共有或一个数独有的三种情况。 2、在手工完成这个问题时,大脑可以判断3个数含有那些因数以及属于那种情况。用算法实现就只能可利用尝试法了。尝试的范围应该是2、3个数中最大数之间的因数。 无论因数属于以下3中情况之一,都只算做一个因数,累乘一次。 (1)、若某个数是3个数的共有的因数,如2是2,14,6中所有数的原创 2021-06-20 19:00:34 · 5247 阅读 · 0 评论 -
判断三边能组成什么三角形(python)实现
'''输入3个数值,判断以它们为边长是否能够构成三角形,判断属于那种三角形:等边,等腰或直角问题分析: 有5中情况: 1、不构成三角形 2、构成等边三角形 3、构成等腰三角形 4、构成直角三角形 5、构成一般三角形 情况3、4可能同时输出,1与其他情况互斥容易分支,5与是在三角形不属于2、3、4、3中情况下输出。下面通过标志量实现合理的输出。算法设计: 算法需要避免5与2、3、4之一同时输出,设置标志变量flag,当数据能构成三角形时,置原创 2021-06-20 18:56:29 · 8698 阅读 · 0 评论 -
在数字圈中寻找出乘积最大和最小的一对数(python)实现
'''在所示的圈中,把相隔一个数据的两个数(如1和10,3和5,3和6)称为一对数,编写算法求出乘积最大的一对数和乘积最小的一对数,输出格式:max=?* ?= ?min=?* ?= ?其中?表示找到满足条件的数和乘积 1 17 16 8 10 12 16 5 1 9 9 3 15 8 12原创 2021-06-20 18:50:41 · 534 阅读 · 0 评论 -
开关灯问题(python)实现
'''开灯问题: 有从1到n依次编号的n名同学和n盏灯。1号同学将所有的灯都关掉;2号同学将编号为2的倍数的灯都打开;3号同学则将编号为3的倍数的灯做相反的处理(该号灯如打开,则关掉;如关闭,则打开);以后的同学都将自己的编号倍数的灯,做相反处理,问经n个同学操作后,那些灯是打开的问题分析: 1、前面已经学过用数组表示过个对象的某种状态,这里就定义有n个元素的a数组,他的每个下标变量a[i]视为一盏灯,i表示编号。a[i]=1表示第i盏灯处于打开状态,a[i]=0表示第i盏灯处于关于状.原创 2021-06-20 18:46:33 · 5425 阅读 · 3 评论 -
统计学生成绩高于90的人数(python)实现
'''当一个学生5门课的成绩分别为记为a1,a2,a3,a4,a5,则要表示有3门课成绩高于90分,有10组逻辑表达式,每组表达式有3个关系表达式,无论书写还是运行,效率都很低,但通过算法运算就能很简单地解决这类问题。算法设计: 1、对每个同学,先计算其成绩高于90分的课程数目,若超过3,则累加到猫族条件的人数中 2、用二重循环模拟以上算法,外层循环模拟50个同学,内层循环模拟5门课程'''def main(): a = [] for i in range(0,.原创 2021-06-20 18:44:41 · 5616 阅读 · 0 评论 -
按规律摆放红蓝花盆(python)实现
'''有三个花盆,红色,蓝色,黄色各n个。开始时排列的顺序是混乱的,如:黄,红,蓝,黄,黄,蓝,黄,红,红,黄,蓝,红,黄,红,黄,蓝,蓝,红,红,红,黄,蓝,蓝,黄,黄,黄,红,红,蓝,蓝,蓝请编写程序:将各个花盆按红,黄,蓝,红,黄,蓝....的顺序排列,而且要求花盆的交换次数最少。问题分析: 本题是按约排序问题,目标是将红花盆送到3i-2的元素,将黄花盆送到与号为3i-1的元素,将蓝花盆送到序号为3i(i=1,2,...,n)的元素。并要求花盆的移动次数最少 1:红 2:原创 2021-06-20 18:39:55 · 532 阅读 · 0 评论 -
找出链环数字对的出现频率(python)实现
'''统计问题: 找出链环数字对的出现频率。 输入n(2<=n<=100)个数字(即0与9之间的数据),然后统计出这组数中相邻两数字组成的链环数字对出现的次数,如:当既有(0,3)又有(3,0)出现时,称他们为链环数字对,算法要统计输出他们各自的出现次数。 例如: 输入:n=20(表示要输入的数的数目) 0 1 5 9 8 7 2 2 2 3 2 7 8 7 8 7 9 6 5 9 输出:(7,8)=2,(8,7)=3 .原创 2021-06-20 18:31:56 · 632 阅读 · 0 评论 -
高精度数据与长整型数据的乘法结果存储问题(python)实现
'''讨论高精度数据与一个长整数精度范围内的数的乘法算法设计: 1、字符型数组存储从键盘输入的高精度数据,这样无需对高精度数据进行分段输入 2、乘法是按由低位到高位运算的,且常常需要向高位进位,所以高精度数据应该由低位到高位存储在数组a中,每个元素存储一位数字 3、每一位仅运算一次,所以乘法的结果也可以存储在数组a中 4、要完成高精度数据从字符型数组存储方式到数值数组存储方式的转换,即数字字符-48就转换为数值数字,不过字符型数组是由高位到低位存储,而数值数组是由低位.原创 2021-06-20 18:12:34 · 207 阅读 · 0 评论 -
打印魔方阵(python)实现
'''魔方阵是我国古代发明的一种数字游戏: n阶魔方是指这样一种方阵,他的每一行,每一列以及对角线上的各数之和为同一个相同的常数,这个常数是:n*(n**2 + 1)/2,此常数称为魔方阵常数。由于偶数次阶的方阵求解起来比较困难,这里只考虑n为奇数的情况 以下就是一个n=3的魔方阵: 6 1 8 7 5 3 2 9 4 它的各行各列及对角线元素之和为15算法设计: 采用穷举法时,对于n比较到时,计算机也需要很长时间才能找出来。原创 2020-11-27 20:12:19 · 12062 阅读 · 5 评论 -
打印螺旋矩阵(python)实现
螺旋阵:任意给定n的值,an如下螺旋方式输出方阵'''n = 3 输出:1 8 7 2 9 6 3 4 5n = 4 输出:1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7算法设计1: 此例按照摆放数据的过程,逐圈分别处理每圈的左,下,右,上方的数据。以能n=4为例: 把1--12看做一层,1原创 2020-11-27 20:09:34 · 1447 阅读 · 1 评论 -
构造趣味矩阵(python)实现
'''编写打印有如下规律的n*n矩阵使左对角线和右对角线上的元素为0,他们上方的元素为1,左边的元素为2,下方的元素为3,右边的元素为4,下图是符合条件的五阶矩阵0 1 1 1 02 0 1 0 42 2 0 4 42 0 3 0 40 3 3 3 0对二维列表进行按行操作时,“外层循环控制行,内层循环控制列”,以i作为行标,j为列标:主对角线上:i=j副对角线上:下标下界为1时,i+j=n+1,下标下界为0时,i+j=n-1主上三角形:i .原创 2020-11-27 20:01:57 · 682 阅读 · 0 评论 -
求使x平方各位互不相同的九位数x(python)实现
'''求x,使得x的平方为一个各个位数字互不相同的9位数字。算法设计: 由x的平方为一个九位数可以得出,x的取值范围在10000--32000之间 1、设置10个元素的状态数组p,记录数字0--9在x的平方中出现的情况,数组元素都赋予初值1,表示数字0--9没有被使用过 2、对尝试的每一个数x,求x*x,并取其各个位数字,数字作为数组的下标,若对应元素为1,则改数字第一次出现,将对应元素赋值为0,表示改数字已经出现过一次,否则,若对应元素为0,则说明由重复数字,结束这次尝试原创 2020-11-27 19:40:02 · 1004 阅读 · 3 评论 -
用最少的张数的钱找零(python)实现
'''一个顾客买了价值x元的商品,只考虑元,并将y元交给售货员,编写算法:在各种币值都很充足的情况下,使售货员能用最少张数的钱币找给顾客算法设计: 1、为了能够用最少的张数给顾客找零,应该尽量多的使用大面值的比重,由大到小逐渐进行50,20,10,5,2,1 2、6中面额是没有等差规律的一组数据,为了构建循环不变式,将6中币值存入数组B中,这样6中币值就可表示为B[i],i=1,2,3,4,5,6,为了尽量多的找出大的面值币种,6种面额应该从大到小存储 3、为统计6种面额的数量原创 2020-11-27 18:57:39 · 3123 阅读 · 0 评论 -
将数字编号翻译为英文编号(python)实现
'''编写算法将数字编号翻译为英文编号。例如:35706,翻译为:three-five-seven-zero-six算法设计1: 1、将英文one--nine存入数组中,对应下标0--9,便于随机存取 2、通过求余,取整运算,渠道编号的各个位数字,用这个数字做下标,取到对应的英文数字 3、考虑到输入的结果是从高位到低位进行的,而取各位数字,比较简单的方法是从低位到高位开始通过求余和整除运算逐步完成的。所以还要另外开辟一个数组,用来存储从低位到高位翻译好的结果,并同时设置变量记录编原创 2020-11-23 19:50:50 · 1238 阅读 · 0 评论 -
找出成绩全及格的学生(python)实现
'''一次考试共考了语文,代数和外语3科,某小组共有9人,考试后及格名单如表,编写程序找出3科全部及格的学生学号科目 及格学生学号语文 1,9,6,8,4,3,7代数 5,2,9,1,3,7外语 8,1,6,7,3,5,4,9算法设计1: 从语文名单中逐一抽出及格学生的学号,现在代数名单中查找,若该学号,说明代数也及格了,再在外语名店中继续查找,该学号的学生外语是否也及格了,若也在,说明该生的三科全部及格了,否则至少有一门没有及格。语文名单中的没原创 2020-11-23 19:46:52 · 3810 阅读 · 0 评论 -
统计学生身高问题(python)实现
'''编程统计身高(单位:厘米):统计分150-154,155-159,160-164,165-169,170-174,175-179,低于150和高于179共8个档次进行。算法设计: 由于多数统计区间的大小都固定为5,这样用“sg // 5-29”(sg:身高)做下标,则只需要开辟8个元素的数组,对应8个统计档次,即可完成统计工作。'''def main(): a = [0,0,0,0,0,0,0,0] sg = int(input("请输入身高,输入-1结束:")).原创 2020-11-23 19:38:37 · 6780 阅读 · 0 评论 -
统计学生选票问题(python)实现
'''某校决定由全校学生选举自己的学生会主席。由5个候选人,编号分别为1,2,3,4,5,选举其中的一人为学生会主席,每个学生一张选票,只能填写一人。编程完成统计工作。''''''算法设计: (1)、虽然选票发放的数量一般是已知的,但收回的数量通常是无法预知的,所以,算法应该采用随机循环,设置停止标志位“-1” (2)、统计过程一般为:先为5个获选人各自设置5个计数器,然后根据录入数据,通过多分支语句或者嵌套条件语句决定为某个计数器加1,这样效率很低。把5个计数器用一个具有5个元素原创 2020-11-23 19:36:01 · 7293 阅读 · 1 评论 -
n个自然数中取出r个数字的排列组合(python)实现
'''找出n个自然数(1,2,3,4,...,n)取出r个数的组合例:当n=5时,r=3时,所有组合为:1 2 3;1 2 4;1 2 5;1 3 4;1 3 5;1 4 5;2 3 4;2 3 5;2 4 5;3 4 5;''''''循环算法设计: 分析以上组合实例,5个数种取出3个数的10组组合,其中魅族三个数由两个特点: (1)、三个数都互不相同 (2)、前面的数小于后面的数 因此可以用3层循环模拟每个组合种的3个数,原创 2020-11-23 19:13:24 · 2850 阅读 · 2 评论 -
用2的幂次方表示任何一个正整数(python)实现
'''任何一个正整数都可以用2的幂次方表示,例如137 =2^7 + 2^3 + 2^0,a^b表示为a(b),即:137 = 2(7) + 2(3) +2(0)。现输入正整数n < 20000,输出符合约定的n的0,2表示(在表示中不能有空格)''''''算法设计: 由于不知道数据的位数,加上对数据还是从低位到高位的操作比较简单,而输出显然是由高位发哦低位的,所以考虑用递归的方法来实现算法。 (1)、应该在递归之后进行输出操作 (2)、为了记录递归的深度,也就是2的指数,.原创 2020-11-23 19:07:43 · 2376 阅读 · 0 评论 -
高到底输出正整数的各个位数字(python)实现
'''任给十进制正整数,请从高位到低位输出各个位上的数字''''''循环算法设计: 该题是从高位到低位输出,我们只需要从低位算,用数组存储结果,最后倒着输出就行'''#循环算法:import sysdef main1(): n = int(input("请输入n的值(注:n的值不能超过19位,python中int的最大位数):")) a = [] while (n > 10 and n < sys.maxsize): a.append原创 2020-11-23 19:01:52 · 3548 阅读 · 0 评论 -
低到高输出正整数的各个位数字(python)实现
'''任给十进制的正整数,请从低位到高位逐位输出各位数字''''''循环算法设计: (1)、求个位数字的算式:n % 10 (2)、为了保证循环体为“不变式”,算式仍用n % 10,所以就要将算式改为n = n//10,将n的十位变成个位'''#循环算法:import sysdef main1(): a = ["个位:","十位:","百位:","千位:","万位:","十万位:","百万位:","千万位","亿位:","十亿位:","百亿位:","千亿位:","万亿位:原创 2020-11-23 18:56:31 · 3983 阅读 · 0 评论 -
算法基础篇(1)循环和递归
一般情况下,只有在处理大量数据时才会借助于计算机,所以算法设计中很重要的工作是把对数据的处理归结成较为规范的可重复的“机械化操作”,然后交给计算机去完成。即将重复处理的大量数据的步骤抽象化成“循环”或“递归”的模式,设计出可以针对不同规模解决问题的算法。循环算法设计中,一个重要的工作就是从已经建立好的数学模型中,构造出“不变式”的“循环条件”,“循环体”。不变式主要是依靠变量或者数组元素表示的,因为变量名或者数组元素是‘不变的’,而变量或者数组元素中的数据是不断变化的,从而数据处理是动态的、渐进的。循环原创 2020-11-23 18:52:01 · 1100 阅读 · 1 评论 -
按照规律打印三角矩阵(python)实现
编写算法: 打印具有下面规律的图形16 210 7 313 11 8 415 14 12 9 5'''编写算法:打印具有下面规律的图形16 210 7 313 11 8 415 14 12 9 5'''def main(): k=1 n = int(input("请输入n的值:")) a = [[0]*n for i in range(n)] #初始化矩阵 for i in range(0,n):原创 2020-10-31 18:04:42 · 894 阅读 · 0 评论 -
求矩阵的鞍点(python)实现
鞍点:一个矩阵中如果该值在行上最小,列上最大,则该数称为该矩阵的鞍点由定义可知:求行上最小,列上最大值就是该矩阵的鞍点'''求矩阵的靶点,即在矩阵行上最小而在列上最大的点'''def get_andian(n): #生成矩阵,将矩阵的元素存入广义表中,相当于C语言中的二维数组 i = 0 juzhen = [] while True: if i >= n: break else: h原创 2020-10-31 17:42:13 · 5728 阅读 · 0 评论 -
求1000以内的完数(python)实现
求完数,首先确定什么是完数:一个数等于其所有因子之和的数就叫完数。'''自顶向下设计方法: 特点: 先整体后局部,先抽象后具体编写算法求1000以内的完数,并按下面的格式输出其因子:28 it`s factors are 1,2,4,7,14。'''def main(): n = int(input("请输入n的值:")) for i in range(1,n+1): #从1到1000开始,逐个遍历,找出其中的完数 result =原创 2020-10-31 16:18:33 · 9440 阅读 · 3 评论 -
求1/1! - 1/3! + 1/5! - 1/7! +...+((-1)^(n+1))/(2*n-1)!的值(python)实现
题目: 求1/1! - 1/3! + 1/5! - 1/7! +…+((-1)^(n+1))/(2*n-1)!的值解决方案:'''求1/1! - 1/3! + 1/5! - 1/7! +...+((-1)^(n+1))/(2*n-1)!第 1 2 3 4 n 项 ''''''算法设计1:构造循环不变式:s = s + (-1)^(n+1) / (2*n-1)!,使用二重循环来完成算法'''def main1(): n原创 2020-10-31 16:07:18 · 1814 阅读 · 0 评论 -
算法分析基础引言
一通废话…哈哈哈哈:编程一路,知识量相当庞大,所以需要我们不断地进行学习才能跟上时代的步伐。对于程序而言,相信大家很早就听说过这样的一个公式:程序 = 数据结构 + 算法;起初我还不明白为什么程序时数据结构和算法的结合,通过不断的学习,慢慢地我似乎明白了其中的道理。程序不单单是一段代码的集合,它就好比我们写作文一样,它是有灵魂的,而程序的灵魂就是算法,相同的数据结构下,不同的算法可能使得程序有着天壤之别。只有将数据结构和算法灵活的使用,才能写出“优美的”程序和代码,就像武侠小说中的绝世高手,不仅外功强悍原创 2020-11-23 17:28:38 · 325 阅读 · 0 评论