1. 程式人生 > >shell編程, 100文錢買100只雞, 簡單實現

shell編程, 100文錢買100只雞, 簡單實現

-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只雞, 簡單實現