用N卢比在C++中能买到的最大升数的水
我们有N卢比。目标是用这笔钱买尽可能多的水,水瓶的价格如下:
- 塑料瓶:A卢比/1升
- 玻璃瓶:B卢比/1升
- 玻璃瓶:B卢比/1升
归还后,玻璃瓶的原始成本变为B-E卢比。
如果塑料瓶的成本仍然低于B-E,则只购买塑料瓶。否则,购买N-E/(B-E)个玻璃瓶,并将剩余的钱用于购买塑料瓶。
输入
N = 6, A = 5, B = 4, E = 3;
输出
Maximum litres of water: 3
解释 − B-E=1, 1<A N-E=3, 用3卢比买了3个1升的玻璃瓶
输入
N = 10, A = 5, B = 10, E = 3;
输出
Maximum litres of water: 2
解释 − B-E=7, 7>A n/a= 10/5 = 2 个塑料瓶可以购买
下面程序中使用的算法如下:
整数money、bottle、gbottle和gempty用于表示价格和我们拥有的金额。
函数maxWater(int mny,int pb,int gb,int ge)将所有值作为参数,并打印可以购买的水量。
变量litrs用于存储计算出的水量(升)。
我们将玻璃瓶的新值(原始值-返回值)作为pb传递。
如果传递的gb值小于pb值,则购买(mny-ge)/gb个玻璃瓶。
减去这个数量来计算剩余的钱,mny-=ltrs*gb
现在可以购买的塑料瓶数量为mny/pb。
如果传递的gb值大于pb值,则只购买mny/pb个塑料瓶。
两种情况下都打印结果,因为瓶子的数量就是水的升数。每个瓶子的容量为1升。
示例
// CPP implementation of the above approach #include<bits/stdc++.h> using namespace std; void maxWater(int mny,int pb,int gb,int ge){ int litrs; // if buying glass bottles is profitable if (gb < pb){ // no. of glass bottles int tmp=mny-ge/gb; litrs=tmp>0?tmp:0; mny-=litrs*gb; // no. of plastic bottles litrs+=mny/pb; cout<<"Maximum Liters of water : "<<litrs<<endl; } // only plastic bottles else cout<<"Maximum Liters of water only Plastic bottles: "<<(mny /pb)<<endl; } int main(){ int money = 20, pbottle=5, gbottle=10, gempty = 8; gbottle=gbottle-gempty; //new cost of glass botlles maxWater( money,pbottle,gbottle,gempty ); }
输出
Maximum Liters of water: 14
广告