码迷,mamicode.com
首页 > 系统相关 > 详细

shell编程, 100文钱买100只鸡, 简单实现

时间:2018-05-18 20:11:16      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:for   问题   图片   比较   bsp   分析   循环   ++   有趣   

今天碰到一个有趣的问题:

技术分享图片

群友用shell写的一个:

#!/bin/bash

# 百元买百鸡,每种鸡至少买一只
all=100
# 公鸡每只多少元
read -p 公鸡多少文一只:  gongji
# 母鸡每只多少元
read -p 母鸡多少文一只:  muji
# 每元钱可以买几只小鸡
read -p 小鸡多少只一文:  xiaoji
# 百元最多买几只公鸡
gongji_count=`expr ${all} / ${gongji}`

echo "======== 百元买百鸡 ========"
echo "公鸡${gongji}文钱一只,母鸡${muji}文钱一只,小鸡一文钱${xiaoji}只,用100文钱买100只鸡,公鸡、母鸡、小鸡都必须有,问公鸡、母鸡、小鸡各多少只?"
echo "公 母 小"

for a in `seq ${gongji_count}`
do
        f=`expr ${all} - ${a} \* ${gongji}`
        g=`expr ${f} / ${muji}`
        for b in `seq ${g}`
        do
                d=`expr ${all} - $a - $b`
                [[ `expr ${d} % ${xiaoji}` == 0 ]] && c=`expr ${d} / ${xiaoji}` || continue
                [[ `expr ${a} \* ${gongji} + ${b} \* ${muji} + ${c}` == ${all} ]] && echo ${a} ${b} `expr ${c} \* ${xiaoji}`
        done
done

不过, 我没看懂, 而且比较慢

技术分享图片

我自己写了一个简单实现:

#!/bin/bash
#
#公鸡5块一只, 母鸡3块一只, 小鸡 1块钱3只
#求100块买100只鸡, 有几种买法
#
#
#version0.2


read -p "定义公鸡的价格(默认为5): " gjp
read -p "定义母鸡的价格(默认为3): " mjp
read -p "定义小鸡的价格为一块钱买?只(默认为3)": xjp

[ -z $gjp ] && gjp=5
[ -z $mjp ] && mjp=3
[ -z $xjp ] && xjp=3
 
[ $[$gjp+$mjp+$xjp] -eq 0 ] && echo "错误输入!" && exit 1;

gjmax=$[100/$gjp]
mjmax=$[100/$mjp]

for ((i=1;i<=$gjmax;i++));do
#公鸡的循环
    for ((j=1;j<=$mjmax;j++));do
    #母鸡的循环    
        xj=$[(100-$i*$gjp-$j*$mjp)*$xjp]
        #公鸡加母鸡的总价算出可购买的小鸡的总数
        [ $[$xj+$i+$j] -eq 100 ] && [ $[$xj/$xjp + $i*$gjp+$j*$mjp] -eq 100  ]  && echo "公鸡:$i, 母鸡:$j, 小鸡: $xj" || continue;
        #    总数量为100只                   总价钱为100块    
    done
done

技术分享图片

我们简单分析了一下算法, 发现for的循环不一样

例如: for a in `seq ${gongji_count}` 

需要将 所有结果放入 list, 写入内存, 而后读取

这可能是影响运行的原因之一, 欢迎大佬分析留言

 

此处感谢@狂神小虾 无私提供的源码

shell编程, 100文钱买100只鸡, 简单实现

标签:for   问题   图片   比较   bsp   分析   循环   ++   有趣   

原文地址:https://www.cnblogs.com/gettolive/p/9057751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!