关于10元钱能买多少瓶酒的问题
问题很简单:有10元钱,一瓶啤酒2元,4个瓶盖可换一瓶酒,2个酒瓶可换一瓶酒,求共可换多少瓶酒?
1. 基本分析
将问题化为初始值以及条件判断问题。
初始值为:5瓶啤酒、5个啤酒瓶、5个啤酒盖
条件判断:兑换后剩余的啤酒瓶或啤酒盖不能够满足兑换条件
故依次编写Matlab程序,如下所示。
%% 问题内容
%有10元钱,一瓶啤酒2元,4个瓶盖可换一瓶酒,2个酒瓶可换一瓶酒,求共可换多少瓶酒?
%% 计算流程
Money=10;
Money_Per_Beer=2;
Num_Per_Beer_Bottles=2;
Num_Per_Beer_Caps=4;
Beers=floor(Money/Money_Per_Beer);
Beer_Bottles=Beers;
Beer_Caps=Beers;
while Beer_Bottles>=Num_Per_Beer_Bottles || Beer_Caps>=Num_Per_Beer_Caps
Add_Beers_By_Beer_Bottles=floor(Beer_Bottles/Num_Per_Beer_Bottles);
Left_Beer_Bottles=mod(Beer_Bottles,Num_Per_Beer_Bottles);
Add_Beers_By_Beer_Caps=floor(Beer_Caps/Num_Per_Beer_Caps);
Left_Beer_Caps=mod(Beer_Caps,Num_Per_Beer_Caps);
Add_Beers=Add_Beers_By_Beer_Bottles+Add_Beers_By_Beer_Caps;
Beers=Beers+Add_Beers;
Beer_Bottles=Left_Beer_Bottles+Add_Beers;
Beer_Caps=Left_Beer_Caps+Add_Beers;
end
%% 显示结果
disp (['最终获得' ,num2str(Beers),'瓶啤酒!']);
disp (['最终剩下' ,num2str(Beer_Bottles),'个啤酒瓶!']);
disp (['最终剩下' ,num2str(Beer_Caps),'个啤酒盖!']);
2. 深层推断
逆向思维,假设钱数无限多,那么就有无限多的瓶盖和瓶子,近乎可以认为瓶子和瓶盖总能够兑换为啤酒。按照“4个瓶盖可换一瓶酒,2个酒瓶可换一瓶酒”的逻辑,那么一个瓶盖值0.5元,一个酒瓶值1.0元,那么一瓶酒的价值为(2-1-0.5)=0.5元,那么可以认为,在钱足够多(其实在10元以上就差不多满足条件了)的时候,一瓶酒大约只需0.5元钱,这其实与计算结果是一致的。
版权属于:清醇缫客
本文链接:https://kidict.com/WriteBlogs/about-10-dollars-to-buy-a-number-of-bottles-of-wine-problem.html
版权声明:未经书面授权禁止转载、摘编、复制或镜像,本站将保留所有的权利!
扫一扫,在手机上查看!
评论已关闭