桃、李、橄榄购买问题

1 篇文章 0 订阅
算法课上,老师讲了一个问题的算法实现,感觉很典型,也很有意思。
问题:桃3钱一个、李4钱一个、橄榄1钱7个,若百钱购得百个,求桃、李、橄榄各几个?并给出实现算法
     对于这样的问题,第一感觉就是得出其方程组(设桃x个、李y个、橄榄z个)
                        x+y+z=100
                        3x+4y+z/7=100
                       其中:x、y、z为0-100之内的整数
     这个问题可以用o(n^3)、o(n^2)的算法实现,一般我们对于这样的问题只要实现并得出结果了之后就不再深究了。其实可以用一个o(n)的算法实现之。 
     思路:第二式乘7,然后减去第一式可得到
                      20x+27y=600
           通过此式可以得出x为3的倍数,y是20的倍数且不大于600/27<30;
           也就是说y只有0、20两种取值可能,然后x则可以通过此式取得x=(600-27y)/20
           最后z可以通过x+y+z=100获得。
           根据这种思路只需要循环两次就可以把结果求解出来。
    具体的C#代码如下:
           int x, y, z;//其中桃为x,李为y,橄榄为z
            for (y = 0; y <= 20; y += 20)
            {
                x = (600 - 27 * y) / 20;
                z = 100 - x - y;
                if ((3 * x + 4 * y + z / 7) == 100)
                {
                    Console.WriteLine("符合要求的结果为:桃(x)-{0};李(y)-{1};橄榄(z)-{2}", x, y, z);
                }
            }
   运行结果为:
            符合要求的结果为:桃(x)-30;李(y)-0;橄榄(z)-70
            符合要求的结果为:桃(x)-3;李(y)-20;橄榄(z)-77
体会:其实利用计算机和垃圾处理有类似——如果在垃圾处理之前能很好的把垃圾进行分类,则在处理的时候就可以节省很多 资源和时间;计算机也一样,若在给计算机处理之间,能进行比较细致的分析和处理,然后再交给计算机处理,往往可以节省很多的计算机时间和计算机资源。
     在社会大分工的情况之下,每一个部分都是大分工中不可缺少的部分,所以每一部分都是需要努力完成和做好的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值