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, 写入内存, 而后读取

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

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

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

时间: 2024-10-28 14:40:59

shell编程, 100文钱买100只鸡, 简单实现的相关文章

100元买一百只鸡的问题求解之一

用100块钱买上100只不同类型的鸡求解方法之一 题目:公鸡5块钱一只,母鸡3块钱一只,小鸡1块钱3只.用100块钱怎样才能买上100只鸡?  //这鸡什么地方有卖 解    :设买公鸡 i 只,买母鸡 J 只,小鸡自然就是 100-i-j 只了 5*i+3*J+(1/3)(100-i-j)=100  //这里可以得到i<=20;j<=33; 得到:14*i+8*j=200 Q:  i*14+j*8==200是怎么来的???? <!DOCTYPE html> <html>

我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的:5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。

百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果!

/** * 百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果! * */ public class Test3 { public static void main(String[] args) { int c = 0; for (int a = 0; a < 100; a++) { for (int b = 0; b < 100; b++) { if ((7 * a + 4 * b) == 100) { c++; System.o

php 公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡请求出公鸡,母鸡和小鸡的数目

// 公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡请求出公鸡,母鸡和小鸡的数目. for ($i=0; $i <= floor(100/3); $i++) { // $i表示公鸡的个数 for ($j=0; $j <= floor(100/5); $j++) { $k = 100 - $i - $j; if ($i*3 + $j*5 + $k/3 == 100) { echo '公鸡'.$i.'只; 母鸡'.$j.'只; 小鸡'.$k.'只<br>'; } } }

百元买鸡问题:用100元买100只鸡,其中母鸡每只3元,公鸡每只2元,小鸡1元,且每种鸡至少买1只。

#include<stdio.h>void main(){ int x,y,z; for(x=1;x<=32;x++) { for(y=1;y<=48;y++) { z=100-x-y; if((z%3==0)&&(3*x+2*y+z/3==100)) { printf("hen=%d,cock=%d,chicken=%d\n",x,y,z); goto laber; } } }laber:;} 原文地址:https://www.cnblogs.

PHP/Python---百钱百鸡简单实现及优化

公鸡5块钱一只,母鸡3块钱一只,小鸡一块钱3只,用100块钱买一百只鸡,问公鸡,母鸡,小鸡各要买多少只? 今天看到这题很简单 ,但是随手写出来后发现不是最优的?? php实现 //============百钱百鸡=========== //公鸡5元/只 母鸡3元/只 小鸡1元/3只 一百元买一百只 $count = 0; //记录运行次数 for($i=0; $i<=100; $i++){ for($j=0; $j<=100-$i; $j++){ if ($i*5 + $j*3 + (100-

试题系列五(公鸡5元一只,母鸡3元一只,小鸡1元3只,求100元刚好买100只鸡的可能)

1 //5.公鸡5元一只,母鸡3元一只,小鸡1元3只,求100元刚好买100只鸡的可能 2 3 #include<stdio.h> 4 5 int main(int argc, char** argv) 6 { 7 int i = 0; 8 int j = 0; 9 10 for (i = 0; i <= 20; i++) 11 { 12 for (j = 0; j <= 30; j++) 13 { 14 if ( (0 == ((100-i-j)%3)) && (

shell编程-1到100的求和与冒泡排序

Shell编程 一.  for循环 生成列表 {起始数..结束数} 命令生成列表 `seq [起始数] [步进长度] 结束数 ` for  l in {1..5};do for  l in `seq 5`;do 求1到100的累加和 1 #!/bin/bash 2 declare -i SUM=0 3 4 for l in {1..100};do 5 SUM=$[$SUM+$i] 6 done 7 8 echo "$SUM" 二. 数组 //数组变量定义 $ arr={1,2,3,4,

shell编程基础一(多种方法求值1+2+..+100)

#SHELL编程基础一(多种方法求值1+2+..+100)##为什么要学好shell shell脚本语言是实现linux系统管理及自动化运维所必备的重要工具,linux系统的底层及基础应用软件的核心大都涉及shell脚本的内容. 每一个合格的linux系统管理员或运维工程师,都需要能够熟练地编写shell脚本语言,并能够阅读系统及各类软件附带的shell脚本内容. 只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的工作,从而为个人的职场发展奠定较好的基础.# 本文的宗旨是熟