今天碰到一个有趣的问题:
群友用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, 写入内存, 而后读取
这可能是影响运行的原因之一, 欢迎大佬分析留言
此处感谢@狂神小虾 无私提供的源码