算法基础课件_第1页
算法基础课件_第2页
算法基础课件_第3页
算法基础课件_第4页
算法基础课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一个笼子里有鸡和兔,现在只知道里面一共有35个头,94个脚,鸡和兔各有多少只?试设计一个求解的算法,并用自然语言描述出来.1.分析问题设所求的鸡数是x,兔数是y,已知笼子里的头数是a,脚数是b,依题意得到如下的方程组:计算机解决问题的第一步x+y=a2x+4y=b 解方程组得:x=2a-b/2 y=b/2-a2.设计算法用自然语言描述算法输入a和b的值;求x=2a-b/2;求y=b/2-a;输出x和y的值;结束。计算机解决问题的第二步优点:通俗易懂 缺点:语句较长,不 便翻译成机器语言用流程图描述算法ab?a=5,b=7,流程图输出结果应为?流程图的基本符号图形符号符号名称说明流线起始、终止框

2、表示算法的开始或结束开始框:一流入线结束框:一流出线输入、输出框框中标明输入、输出的内容只有一流入线和一流出线处理框框中标明进行什么处理只有一流入线和一流出线判定框框中标明判定条件并在框外标明判定后的两种结果的流向一流入线两流出线(Y和N)但同时只能一流出线起作用流线表示从某一框到另一框的流向连接圈表示算法流向出口或入口连接点一条流线鸡兔同笼问题流程图开始输入a,b的值求x=2a-b/2求y=b/2-a输出x,y的值结束输入a和b的值;求x=2a-b/2;求y=b/2-a;输出x和y的值;结束。对照自然语言描述的算法画流程图,你可以吗程序三种基本控制结构(重要)用伪代码描述算法 输入a和b的值

3、;求x=2a-b/2;求y=b/2-a;输出x和y的值;结束。x=2a-b/2y=b/2-aprint x,yInput a,ba=int(input(请输入头数:)b=int(input(请输入脚数:)x=int(2*a-b/2)y=int(b/2-a)print (鸡的数量为,x)print ( 兔的数量为,y)3.编写程序计算机解决问题的第三步利用Python语言编程程序4.调试运行程序如果程序语法有错误,程序运行时计算机会给出提示信息,人们可根据提示修改程序,直到无错;我们还需要对结果进行验证,因为逻辑错误或计算方法错误计算机无法检查。所以若出现后一种情况,可能需要返回前几步进一步修改

4、,直到满意。计算机解决问题的第四步分析问题设计算法编写程序调试运行程序1234计算机解决问题的过程算法的概念描述算法的方法计算机解决问题的步骤算法的特征01020403在有限步骤内求解某一问题所使用的一组定义明确的规则。有穷性、确定性、数据输入、数据输出、可行性、自然语言流程图伪代码重点读懂流程图,三种基本结构分析问题设计算法编写程序调试运行程序 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。if _name_ = _main_: s = (1,2,3,4) for

5、 a in s: for b in s: for c in s: if a != b and b != c and c != a: print %d%d%d %(a,b,c)一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少?程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。from math import sqrtif _name_ = _main_: i = 1 while i = 2: if year %400 = 0 or (year % 4 = 0 and year % 1

6、00 != 0): sum += 1 print it is the %dth day of the year. % sum输入三个整数x,y,z,请把这三个数由小到大输出。程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。if _name_ = _main_: a,b,c = input(),input(),input() if a b: a,b = b,a if a c: a,c = c,a if b c: b,c = c,b print small to big: %d,%d

7、,%d %(a,b,c)输出9*9口诀。程序分析:分行与列考虑,共9行9列,i控制行,j控制列。if _name_ = _main_: for i in range(1,10): for j in range(1,10): print %d*%d = %-3d %(i,j,i*j), print 输出国际象棋棋盘。程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。if _name_ = _main_: for i in range(8): for j in range(8): if (i + j) % 2 = 0: print %c%219,else: pri

8、nt a, print古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.if _name_ = _main_: f1,f2 = 1,1 print 1: %d %f1 print 2: %d %f2 for i in range(3,21,2): f1 = f1 + f2 print %d: %d %(i,f1) f2 = f1 + f2 print %d: %d %(i+1,f2)判断101-200之间有多少个素数,并输出所有素数。程序分

9、析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。from math import sqrtif _name_ = _main_: count = 0 flag = 1 for a in range(101,201): s = int(sqrt(a) for i in range(2,s+1): if a % i = 0: flag = 0 break if flag = 1: count += 1 print a else: flag = 1 print the total num is %d %count打印出所有的“水仙花数”,所谓

10、“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方5的三次方3的三次方。程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。if _name_ = _main_: print water flower number is :, for a in range(100,1000): x,y,z = a/100,a/10%10,a%10 if x*3 + y*3 + z*3 = a: print %d,%a,将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到

11、一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。if _name_ = _main_: n = input(please enter a number:) print %d = %n, for k in range(2,n+1): while n != k: if n % k = 0: n = n/k print %d * %k, else: break print

12、n输入两个正整数m和n,求其最大公约数和最小公倍数。程序分析:利用辗除法。if _name_ = _main_: print please enter two numbers: s = input(),input() s.sort() a,b = s0,s1 while b != 0: t = a % b a = b b = t print common divisor:%d%a print common multiple:%d%int(s0*s1/a)求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加

13、有键盘控制。程序分析:关键是计算出每一项的值。if _name_ = _main_: print please enter a and n: a,n = input(),input() sum = a if n 1: b = a for i in range(2,n+1): b = a + b*10 print b sum += b print a+aa+aaa+. = %ld %sum一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=123.编程找出1000以内的所有完数。程序分析:因子就是所有可以整除这个数的数,不包括这个数自身。if _name_ = _main_: for

14、n1 in range(3,1001): sum = 1 n = n1 for k in range(2,n+1): while n != k: if n % k = 0: n = n/k sum += k else: break sum += n if sum = n1: print sum猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。程序分析:采取逆向思维的方法,从后往前推断。if _name_ = _mai

15、n_: s1 = 1 for day in range(10,1,-1): s2 = (s1+1)*2 s1 = s2 print the total number is %d %s1两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。if _name_ = _main_: for x in a,b,c: if x != a and x != c: print x:%s%x for z in a,b,c: if z != x and z != c: print z:%s%z for y in a,b,c: if y != x and y != z: print y:%s%y有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。程序分析:请抓住分子与分母的变化规律。if _name_ = _main_: a,b,s = 2,1,0 for n in range(1,21): s += a/b a = a+b b = a-b print sum = %.3f %s求1+2!+3!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论