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

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

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

  • 相关阅读:
    [多线程学习笔记]条件变量
    [多线程学习笔记]互斥量
    [多线程学习笔记]线程生命周期
    多定时器队列
    双向环形链表
    多目录,多可执行文件的Makfile的编写
    大工匠
    从零开始打造我的计算机系统【运行效果】
    从零开始打造我的计算机系统【交叉汇编器】
    C中的回调函数
  • 原文地址:https://www.cnblogs.com/gettolive/p/9057751.html
Copyright © 2020-2023  润新知