欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 用自然语言/流程图描述算法并实现(以鸡兔同笼问题为例)

程序员文章站 2022-02-06 11:33:00
算法的定义及作用一、导入:编程解决问题的步骤分析问题划分边界设计算法 #importance编写程序调试测试后期维护二、生活中的算法问题:饮料换杯两个杯子,一杯装可乐,一杯装雪碧,怎样才能让装可乐的杯子装雪碧,装雪碧的杯子装可乐?再拿一个杯子。设计算法:t=a #第一步a=b #第二步b=t #第三步编写代码:>>> a="可乐">>> b="雪碧">>> t=a>>&g...



算法的定义及作用

一、导入:编程解决问题的步骤

  1. 分析问题
  2. 划分边界
  3. 设计算法 #importance
  4. 编写程序
  5. 调试测试
  6. 后期维护

注:参考嵩天老师的《Python语言程序设计》

二、生活中的算法问题:饮料换杯

两个杯子,一杯装可乐,一杯装雪碧,怎样才能让装可乐的杯子装雪碧,装雪碧的杯子装可乐?

再拿一个杯子。

  1. 设计算法:
    t=a #第一步
    a=b #第二步
    b=t #第三步

  2. 编写代码:

>>> a="可乐"
>>> b="雪碧"
>>> t=a
>>> a=b
>>> b=t
>>> print("a=",a,"b=",b)
a= 雪碧 b= 可乐 

完成由算法到程序的过程。

算法的定义:解决问题的步骤
算法是有限步骤内求解某一问题所使用的一组定义明确的规则。

算法怎么描述

一、自然语言描述鸡兔同笼问题

我国古代数学著作《孙子算经》中应有“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各有几和?”

  1. 数学思维:假设法、列方程
  2. 计算思维:穷举法

列举出鸡和兔子只数的组合,不断试错。
试错有止境。
将鸡的数量定义为变量a,则兔为35-a,鸡和兔脚数量的总和是否为94即为程序是否结束的判断标准

二、自然语言描述鸡兔同笼问题
算法描述的两个基本要素:初始状态、变化规律。

  1. 初始状态:最开始尝试的那一组数据(0只鸡、35只兔子)设鸡为变量n,兔子为变量35-n。
  2. 变化规律:失败了之后鸡的数量+1,兔子的数量-1。变化规律n=n+1。

故:自然语言描述

  1. 假设的鸡的数量为n只;兔的数量为35-n;
  2. n=0;
  3. 如果2n+4(35-n)=94,则输出结果n;否则执行步骤4;
  4. n=n+1;
  5. 执行步骤3;

二、流程图描述鸡兔同笼问题:

Python 用自然语言/流程图描述算法并实现(以鸡兔同笼问题为例)

三、代码实现

基础实现:

#鸡兔同笼V1:
n=0
m=35-n    #设初值,鸡有0只,兔子有35只
while 0<=n<=35 and 0<=m<=35:  
    if 2*n+4*m == 94:           #表判断
        print("鸡有",n,"只")
        print("兔有",m,"只")
        break
    else:
        n=n+1     #鸡的数量加一,兔子的数量减一,不断试错
        m=35-n    #直到得出正确答案 

运行结果:

鸡有 23 只
兔有 12 只

能看过程的:

n=0
m=35-n    #设初值,鸡有0只,兔子有35只
while 0<=n<=35 and 0<=m<=35:  
    if 2*n+4*m == 94:  #表判断
        print("符合!")
        print("鸡有",n,"只")
        print("兔有",m,"只")
        break
    else:
        n=n+1     #鸡的数量加一,兔子的数量减一,不断试错
        m=35-n    #直到得出正确答案
        print("鸡有",n,"只、","兔有",m,"只时,","符合条件吗?") 

运行结果:

鸡有 1 只、 兔有 34 只时, 符合条件吗?
鸡有 2 只、 兔有 33 只时, 符合条件吗?
鸡有 3 只、 兔有 32 只时, 符合条件吗?
鸡有 4 只、 兔有 31 只时, 符合条件吗?
鸡有 5 只、 兔有 30 只时, 符合条件吗?
鸡有 6 只、 兔有 29 只时, 符合条件吗?
鸡有 7 只、 兔有 28 只时, 符合条件吗?
鸡有 8 只、 兔有 27 只时, 符合条件吗?
鸡有 9 只、 兔有 26 只时, 符合条件吗?
鸡有 10 只、 兔有 25 只时, 符合条件吗?
鸡有 11 只、 兔有 24 只时, 符合条件吗?
鸡有 12 只、 兔有 23 只时, 符合条件吗?
鸡有 13 只、 兔有 22 只时, 符合条件吗?
鸡有 14 只、 兔有 21 只时, 符合条件吗?
鸡有 15 只、 兔有 20 只时, 符合条件吗?
鸡有 16 只、 兔有 19 只时, 符合条件吗?
鸡有 17 只、 兔有 18 只时, 符合条件吗?
鸡有 18 只、 兔有 17 只时, 符合条件吗?
鸡有 19 只、 兔有 16 只时, 符合条件吗?
鸡有 20 只、 兔有 15 只时, 符合条件吗?
鸡有 21 只、 兔有 14 只时, 符合条件吗?
鸡有 22 只、 兔有 13 只时, 符合条件吗?
鸡有 23 只、 兔有 12 只时, 符合条件吗?
符合!
鸡有 23 只
兔有 12 只

尝试将鸡和兔子的头和脚的数量改成可以输入的模式:

a=int(input("请问一共有多少个头:"))
b=int(input("请问一共有多少只脚:"))
n=0
m=a-n
while 0<=n<=a and 0<=m<=a:
    if 2*n+4*m == b:
        print("==================================================")
        print("鸡有",n,"只")
        print("兔有",m,"只")
        break
    else:
        n=n+1
        m=a-n
       #print("当鸡的数量为:",n,"兔子的数量为:",m,"不符合条件!") 

运行结果:

请问一共有多少个头:24
请问一共有多少只脚:84
==================================================
鸡有 6 只
兔有 18 只

提出更改:

当输入头和脚的数目求解不出答案时,以上程序不会报错。
可以利用判断语句实现这一功能。

本文地址:https://blog.csdn.net/yinaiyinai1212/article/details/109062736