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

Posted GETTOLIVE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程, 100文钱买100只鸡, 简单实现相关的知识,希望对你有一定的参考价值。

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

群友用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只鸡, 简单实现的主要内容,如果未能解决你的问题,请参考以下文章

3. 百钱买白鸡问题

百鸡白钱

php_100元买100鸡

百钱买鸡鸣

1074: 百钱买百鸡

算法-百钱买白鸡