D博弈与核心能源动力(牛客网)

ZWY近喜欢在下课后喝酒,她说:“喝酒是人类进步的动力”。现在,便利商店推出了兑换活动。
    1.两个酒瓶可以兑换1瓶酒
    2.四个酒瓶盖子可以兑换1瓶酒
她先知道,在当前她所拥有的资金m和一些空酒瓶k、瓶盖g和当前酒价p已知情况下,她最多可以喝到多少瓶酒。
 

输入描述:

在一行中,给出四个整数,含义如题所述,m(-10000 <= m <= 10000),k(0 <= k <= 10000),g(0 <= g <= 10000),p(1 <= p <= 200)

输出描述:

输出一个整数,表示ZWY最多能喝到多少瓶酒。

题目解析:本题难点在于由于不断的喝酒会有不断的空酒瓶和瓶盖,因此计算量是比较大的,因此要灵活的用循环来做,推荐用while语句来做。

1.首先,先用m/p得到用钱来买喝的酒,别忘了空酒瓶和瓶盖数也会随之增加。

2.用while语句,当空酒瓶数和瓶盖数分别大于等于2和4时,进入循环.

3.空酒瓶数大于等于2,除2得到喝酒的瓶数,取2的余数则是如果k为奇数的话,会有剩余,最后别忘了空酒瓶数和瓶盖数增加。

4.最后瓶盖数大于等于4,除4得到喝酒的瓶数,取4的余数也是求剩余,最后别忘了空酒瓶数和瓶盖数增加。

代码如下:

#include<iostream>

using namespace std;

int main(){
    
int m,k,g,p;
cin>>m>>k>>g>>p;

int sum=0;
if(m>0){
    int t=m/p;
    sum+=t,k+=t,g+=t;
}
while(k>=2||g>=4){

    int t=0;
    if(k>=2){
        t=k/2;
        k%=2;//巧妙的如果k为奇数,可以余下的空瓶数;
        sum+=t,k+=t,g+=t;
    }
    if(g>=4){
        t=g/4;
        g%=4;
        sum+=t,g+=t,k+=t;
    }
}
cout<<sum<<endl;
return 0;


}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值