shell編程, 100文錢買100只雞, 簡單實現
阿新 • • 發佈:2018-05-18
-s list 例如 技術分享 有趣 發現 必須 shell shel
今天碰到一個有趣的問題:
群友用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只雞, 簡單實現