概述

鸡兔同笼,是古代著名典型趣题之一,记载于《孙子算经》之中,题目为“有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?”。鸡兔同笼问题,是小学奥数的常见题型,也是计算机编程算法中常见的一道题,现阶段开始shell脚本的学习,因此不妨用脚本来尝试编写一个计算该问题的脚本,加深自己对Linux shell脚本的理解。

算法

在做一道数学题之前,思路是极为重要的,自己如何解决这道题,怎么按照计算机语言的思维来帮助我们计算就成为了首要之重。我们明白,这是一道典型的二元一次方程,假设兔子为x,鸡为y,得到方程(1) x+y=35;(2) 4x+2y=94,(2)-2*(1)即可得到2x=24,x=12的值,从而得到y=23,但是我们如何用脚本语言中表达出意思呢?

题目中给出的量是35个头,94只脚,要求计算的是兔子和鸡的数量,因此我们可以将兔子和鸡看作是计算机要计算的数,头和脚是需要手动输入的数,不能说是题目给94,35,做出的脚本就只能按照94和35计算吧,那未免也太浪费资源了吧?

网上有很多的思路,不过我们可以看到,上述方程(2)除以2再减去方程(1)也就可以得到一只小动物的数量了,所有我们的思路是设定变量feet为脚的数量,设定变量head为头的数量,因此就可以有$feet/2-$head 就可以出来一钟小动物的数量,余下的用$head的值去减,另外一只小动物数量也随之而出了。

编程

在得到上面的思路后,编程可以开始了,第一步,让某某人输入头的数量和脚的数量

read -p "input the sumheads:" head

read -p "input the sumfeet:" feet

#输入一共有多少个头,多少只脚

好了,接下来我们就可以摆数字计算了吗?No!计算机思维没有像我们人类思维天生带限制范围,稍微一不注意就报错,所有第一步还是检查输入的是不是数字吧!

[[ "$head" =~ ^[1-9][0-9]*$ ]] && [[ "$feet" =~ ^[1-9][0-9]*$ ]] || { echo wrong format; exit; }

#检查输入的任意一个值是否为数字,不是的话报错误格式并退出,退出是整个脚本退出,不是当前命令退出继续执行,因此使用花括号括起来

可以确定数值是有了,可是现在还不够,如果是恶意输入呢?头比脚多呢?鸡腿都被肯德基老爷爷拿去做套餐了?所以再来一步吧,保险些

[ "$head" -gt "$feet" ] && { echo input the corrected number; exit; }

#检查输入头的数量是否大于脚的数量,如果大于,报错误的数值

这下总该千呼万唤shi出来的摆算式了吧?那么,好的

rabbits=$[$[$feet/2]-$head ]

chicken=$[$head-$rabbits]

############################

c=$[$chicken*2]

h=$[$rabbits*4]

tmp=$[$[$c+$h]/$feet]

如果说'#'之上的能看作根据之前思路列出的算式,那么下面的是干什么的?答:自己想去吧

不难发现,'#'之下的$tmp作为一个临时变量,计算意思是计算出的脚的数量除以输入的脚的数量,做这个是为了发现输入的数值是否符合正常运算,说到底还是在看是不是失误输入,全部码为

rabbits=$[$[$feet/2]-$head ]

chicken=$[$head-$rabbits]

c=$[$chicken*2]

h=$[$rabbits*4]

tmp=$[$[$c+$h]/$feet]

[ ! "$tmp" == 1 ] && echo there must be some alien steal my beasty

#检查输入,如果值为1说明给出头和脚的数量是搭配的,否则给出提示语,计算的值也可能不是所要的答案

输出结果表示上

echo chicken=  $chicken

echo rabbits=  $rabbits

ok,可以算出来了,shell脚本不支持小数点,本来还想分别对$tmp>1和$tmp<1的情况做出不同解释不同运算,或许目前我的水平还不知道是否可以存在0<$tmp<1的情况,这下对于我而言$tmp<1情况算是凉了,最后附上代码和各种输入的情况

转载于:https://blog.51cto.com/13873498/2154682

Linux环境下Shell脚本基础篇-鸡兔同笼问题相关推荐

  1. linux脚本变量运算符,linux——Shell 脚本基础篇(变量类型,变量操作,定义,运算与逻辑关系)...

    Shell 脚本基础 1.变量 什么是变量 #a=1 # echo $a 1 变量:可以变化的量 1.2变量名称注意事项 变量名不能以数字开头 不能与系统中已有的环境变量重名,尽量不要全部使用大写,尽 ...

  2. Jav环境下shell脚本的调用

    开发过程中,很多时候需要shell脚本的支持某些系统层面的命令执行,譬如生成RSA秘钥文件等,这时候往往需要从高级语言中直接调用Shell脚本,完成命令执行,本文以一个例子为线索简单介绍一下如何实现在 ...

  3. FTP多用户权限 linux环境 一站式解决方案(基础篇)

    需求背景:第三方厂商中国移动.电信.联通.微软.京东与我司内部进行接口交易,采用ftp协议,外部厂商负责上传文件,内部系统负责下载各厂商上传的文件. 文章目录 一.用户与目录 1. 用户与目录约定 2 ...

  4. java基础:鸡兔同笼问题

    今有鸡和兔关在一只笼子里:一共35只动物,笼子里94只腿:求鸡有多少只.兔有多少只? for(int i=0;i<=35;i++){for(int j=0; j<=35;j++){if(i ...

  5. Python编程基础:鸡兔同笼问题。假设共有鸡、兔30只,脚90只,求鸡、兔各有多少只。

    代码: feet1 = 0 feet2 = 0 head = 0 rabbits = 0 chickens = 0head = int(input('请输入只数:')) feet1 = int(inp ...

  6. linux 脚本编写 -eq,关于shell脚本基础编程第四篇

    shell脚本基础编程第四篇 本章主要内容:函数 函数 function: function 名称 { 命令 ; } 或 name () { 命令 ; } 定义 shell 函数. 创建一个以 NAM ...

  7. Linux环境下,通过shell脚本实现一键部署MySQL,并支持多种类型

    Linux环境下一键部署MySQL脚本,支持多种类型 前言 一.使用前须知 二.使用方法 三.shell脚本内容 总结 前言   MySQL是目前最流行的关系型数据库管理系统之一,属于 Oracle ...

  8. Linux环境下的数据库(基础篇上)

    数据库 一.Linux环境下数据库的安装 二.数据库的基础操作 三.数据库中表的操作 一.Linux环境下数据库的安装 需要在 root 用户权限下进行数据库的一系列安装操作 安装 mariadb 服 ...

  9. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

最新文章

  1. Flask----SQLAlchemy
  2. html 弹窗被拦截,window.open()弹窗被浏览器拦截的解决方法
  3. mysql文档批处理去重_数据导入经验总结
  4. php 动态参数,php怎么实现动态传参数?
  5. 尝试改写新浪网分类资讯爬虫2
  6. IOT(8)---LoRa vs NB-IoT:12个角度看哪个物联网标准更具优势?
  7. Redis教程(一):Redis简介
  8. HihoCoder1449 后缀自动机三·重复旋律6
  9. RM3100 stm32 hal库 spi 磁力计数据
  10. 垂直滤波和水平滤波的区别_无锡有源滤波器的功能是_灿勤科技
  11. 使用 Beyond Compare 和版本控制系统
  12. 惠普扫描应用程序当前正由此计算机上的其,惠普打印机 打印扫描的时候显示“由于另一个程序或另一台计算机正在使用联网的HP成像设备因此无法执行”...
  13. uView项目前端获取屏幕高度
  14. 音频降噪-fir滤波器
  15. 《Solar Energy Materials and Solar Cells》期刊介绍(SCI 2区)
  16. 2021年C证(安全员)复审模拟考试及C证(安全员)作业模拟考试
  17. 央联众商理财公司,我个人的理财观!
  18. 【JZOJ100208】【20190705】传说之下
  19. 电脑桌面如何添加便签 桌面添加便签的方法是什么
  20. [野火]STM32 F103 HAL库开发实战指南笔记之简单外设总结

热门文章

  1. 魔兽争霸war3心得体会(三):UD内战
  2. 高考真的能改变命运吗?
  3. 转: GSM信令流程
  4. 6-3 定义Person类
  5. Enable tracemalloc to get the object allocation traceback及ResourceWarning: unclosed file
  6. 记一次Emotet木马下载器的分析
  7. 观察者模式 | C#实现
  8. 舌尖上的AI:人工智能技术正在被“端上”餐桌
  9. docker compose 安装mysql报错 column count of performance_schema.events....
  10. GET提交中%5B与%5D代表什么意思?