用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

更新于:2020年8月3日

485 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告