ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

编程训练: 大学计算机 实验3 算法分析设计与应用

编程训练: 大学计算机 实验3 算法分析设计与应用 第1关百钱买百鸡1任务描述本关任务我国古代数学家张丘建在《算经》一书中提出的数学问题鸡翁一值钱五鸡母一值钱三鸡雏三值钱一。百钱买百鸡问鸡翁、鸡母、鸡雏各几何相关知识为了完成本关任务你需要掌握1.穷举法思想2.如何用循环实现穷举法。程序设计思路定义变量i,j,k分别代表公鸡、母鸡、小鸡数量定义变量n代表总的方案数量。之后设置三重循环逐一测试是否满足条件满足条件则变量n加1。参考代码如下n0foriinrange(21):forjinrange(34):forkinrange(0,101,3):ifijk100and i*5j*3k//3100:nn1 print(f第{n}种方法公鸡{i}只母鸡{j}只小鸡{k}只)print(f百钱买百鸡共有{n}种方法)测试答案:#请在下方编写代码##############begin###############n0foriinrange(21):# 公鸡最多20只5*20100forjinrange(34):# 母鸡最多33只3*3399forkinrange(0,101,3):# 小鸡数量必须是3的倍数ifi j k100and i *5 j *3 k //3100: nn 1print(f第{n}种方法公鸡{i}只母鸡{j}只小鸡{k}只)print(f百钱买百鸡共有{n}种方法)#############end##################第2关百钱买百鸡2任务描述本关任务设公鸡每只5元母鸡每只3元小鸡每元3只现用x元钱买y只鸡。编写一个程序输入x和y算出各买多少只鸡(公鸡、母鸡、小鸡必须都有如果有多个符合条件的结果则都显示出来。如果没有符合条件的结果则显示无解若输入:钱100鸡100结果如下所示**公鸡4只母鸡18只小鸡78只 公鸡8只母鸡11只小鸡81只 公鸡12只母鸡4只小鸡84只**测试答案:xeval(input(钱))yeval(input(鸡))c0# 方案数计数器# 公鸡、母鸡、小鸡都必须有所以从1开始foriinrange(1, y 1):# 公鸡数量forjinrange(1, y 1):# 母鸡数量forkinrange(3, y 1,3):# 小鸡数量必须是3的倍数ifi j ky and5* i 3* j k //3x: print(f公鸡{i}只母鸡{j}只小鸡{k}只)c1ifc0: print(无解)第3关鸡兔同笼问题任务描述任务说明大约在1500年前《孙子算经》中就记载了这个有趣的问题“今有雉兔同笼上有三十五头下有九十四足问雉兔各几何”意思是有若干只鸡和兔子关在同一个笼子里从上面数有35个头从下面数有94只脚问笼子中有多少只鸡多少只兔子范例程序假设i,j代表鸡和兔的数量n代表总的方案数量n0foriinrange(36):forjinrange(36):ifij35and i*2j*494:nn1 print(f第{n}种方法鸡{i}只兔{j}只)print(f鸡兔同笼共有{n}种方法)测试答案:teval(input())# 头的个数jeval(input())# 脚的个数n0# 方案数计数器foriinrange(t 1):# 鸡的数量forkinrange(t 1):# 兔的数量ifi kt and2* i 4* kj: n1print(f鸡{i}只兔子{k}只)ifn0: print(无解)第4关二分法猜数任务描述本关任务假如有一个游戏是让你在1-100之间猜一个数:如果猜对了那么显示你猜对了否则继续猜并提示猜大了还是猜小了直到猜对为止最后显示猜的总次数。相关知识为了完成本关任务你需要掌握1.掌握二分法的概念2.熟练使用循环语句。编程提示用二分法猜数最多猜的次数为 log2n以下为随机猜数的游戏被猜的数字和第一次猜的数都随机生成运行程序观察程序运行结果。importrandom targetrandom.randint(1,100)# 随机生成一个1-100之内的整数作为要被猜的数字guessrandom.randint(1,100)#随机生成第一次猜的数字print(ftarget {target})max1100# 赋最大值初始值min10# 赋最小值初始值count1# 赋猜测次数初始值为1次whileTrue:# 没猜中就不停循环ifguesstarget: print(f第{count}次{guess}{target})min1guess# 猜测数字小了将此次猜测结果赋给min1,作为下次最小值guess(guess max1)//2 count1elifguesstarget: print(f第{count}次{guess} {target})max1guess# 猜测数字大了将此次猜测结果赋给max1,作为下次最大值guess(min1 guess)//2 count1else:# 猜中了就退出print(f第{count}次{guess} {target})breakprint(f猜的总次数为{count})测试答案:targeteval(input(请输入要猜的数1-100:))guesseval(input(请输入第一次猜的数1-100:))# 请在下方编写代码##############begin###############max1100# 赋最大值初始值min10# 赋最小值初始值count1# 赋猜测次数初始值为1次whileTrue:# 没猜中就不停循环ifguesstarget: print(f第{count}次{guess}{target})min1guess# 猜测数字小了将此次猜测结果赋给min1,作为下次最小值guess(guess max1)//2count1elifguesstarget: print(f第{count}次{guess} {target})max1guess# 猜测数字大了将此次猜测结果赋给max1,作为下次最大值guess(min1 guess)//2count1else:# 猜中了就退出print(f第{count}次{guess} {target})breakprint(f猜的总次数为{count})#############end##################第5关求n的阶乘任务描述本关任务输入非负整数n求n的阶乘如果输入的 n为负数则显示“输入有误”。为了完成本关任务你需要掌握1Python的函数定义及调用2递归的思想。编程分析阶乘是一个典型的递归算法,假设所求的阶乘用函数fac(n)表示1当 n0 或 n1时 ,fac(n)12当 n1时fac(n)n*fac(n-1)测试说明系统对你编写的代码进行测试样例输入请输入n6样例输出6的阶乘为720样例输入请输入n-10样例输出输入有误开始你的任务吧祝你成功测试答案:#请在下方编写代码##############begin################ 定义阶乘函数def fac(n):ifn0or n1:return1else:returnn * fac(n -1)# 输入nneval(input(请输入n))# 判断输入是否合法ifn0: print(输入有误)else: resultfac(n)print(f{n}的阶乘为{result})#############end##################第6关斐波那契数列任务描述本关任务编写一个能计算斐波那契数列中第x个数的小程序。相关知识为了完成本关任务你需要掌握1.什么是斐波那契数列2.for循环、函数的递归什么是斐波那契数列斐波那契数列Fibonacci sequence又称黄金分割数列、因数学家莱昂纳多·斐波那契Leonardoda Fibonacci以兔子繁殖为例子而引入故又称为“兔子数列”。有一对兔子从出生后第 3 个月起每个月都生一对兔子小兔子长到第三个月后每个月又生一对兔子假如兔子都不死每个月的兔子数形成的数为斐波那契额数列在数学上斐波那契数列以如下被以递推的方法定义F(1)1F(2)1, F(n)F(n - 1)F(n - 2)n ≥ 3n ∈ N*测试答案:# 定义斐波那契函数递归方式def fib(n):ifn1or n2:return1else:returnfib(n -1) fib(n -2)# 输入nneval(input(请输入n))# 判断输入是否合法ifn0: print(输入有误)else: resultfib(n)print(f第{n}的数为{result})
返回列表