啤酒2块一瓶,4个瓶盖可换1瓶,2个空瓶可换1瓶,10块钱可以喝多少瓶?

1、编程的写法:

using System;
using System.Collections.Generic;
using System.Text;

namespace SlowX.CalcEgg
{
    class Program
    {

        protected static string ShowStr(int theResult, int KP, int PG)
        {
            return theResult + "瓶啤酒、" + KP + "空瓶、" + PG + "瓶盖";
        }

        static void Main(string[] args)
        {
            // 啤酒2块一瓶,4个瓶盖可换1瓶,2个空瓶可换1瓶,10块钱可以喝多少瓶?
            int theResult = 5;
            int KP = 5; // 空瓶
            int PG = 5; // 瓶盖
            string str = null;

            int dV = 0;
            int mV = 0;

            bool isBreak = true;

            str = ShowStr(theResult, KP, PG);
            Console.WriteLine(str);

            while (true)
            {
                isBreak = true;               

                dV = KP / 2; // 兑换多少啤酒 //
                mV = KP % 2; // 剩余多少空瓶 //

                if (dV != 0)
                {
                    theResult += dV;
                    KP = mV + dV;
                    PG += dV;

                    str = dV * 2 + "空瓶兑换" + dV + "瓶啤酒," + ShowStr(theResult, KP, PG);
                    Console.WriteLine(str);

                    isBreak = false;
                }

                dV = PG / 4; // 兑换多少啤酒 //
                mV = PG % 4; // 剩余多少瓶盖 //

                if (dV != 0)
                {
                    theResult += dV;
                    KP += dV;
                    PG = mV + dV;

                    str = dV * 4 + "瓶盖兑换" + dV + "瓶啤酒," + ShowStr(theResult, KP, PG);
                    Console.WriteLine(str);

                    isBreak = false;
                }

                if (!isBreak)
                    continue;

                // 借瓶模式 //
                if (KP == 1)
                {
                    // 借一空瓶,还一空瓶,得一瓶啤酒+一瓶盖
                    theResult += 1;
                    KP = 0;
                    PG += 1;

                    str = "借一空瓶,还一空瓶,得一瓶啤酒," + ShowStr(theResult, KP, PG);
                    Console.WriteLine(str);

                    isBreak = false;
                }

                if (!isBreak)
                    continue;

                if (PG == 3)
                {
                    // 借一空瓶,还一空瓶,得一瓶啤酒+一瓶盖 //
                    theResult += 1;
                    PG = 0;
                    KP += 1;

                    str = "借一瓶盖,还一瓶盖,得一瓶啤酒," + ShowStr(theResult, KP, PG);
                    Console.WriteLine(str);

                    isBreak = false;
                }

                if (!isBreak)
                    continue;

                break;
            }

            // 最后逻辑 //
            if (KP == 0 && PG == 2)
            {
                // 剩下2瓶盖的模式 //
                theResult += 1;
                PG = -1;
                KP = 1;
                str = "借两瓶盖,还一瓶盖,得一瓶啤酒," + ShowStr(theResult, KP, PG);
                Console.WriteLine(str);

                theResult += 1;
                PG = 0;
                KP = 0;
                str = "借一空瓶,还一空瓶一瓶盖,得一瓶啤酒," + ShowStr(theResult, KP, PG);
                Console.WriteLine(str);
            }

            str = ShowStr(theResult, KP, PG);

            Console.WriteLine(str);
        }

    }
}

结果输出

5瓶啤酒、5空瓶、5瓶盖

4空瓶兑换2瓶啤酒,7瓶啤酒、3空瓶、7瓶盖

4瓶盖兑换1瓶啤酒,8瓶啤酒、4空瓶、4瓶盖

4空瓶兑换2瓶啤酒,10瓶啤酒、2空瓶、6瓶盖

4瓶盖兑换1瓶啤酒,11瓶啤酒、3空瓶、3瓶盖

2空瓶兑换1瓶啤酒,12瓶啤酒、2空瓶、4瓶盖

4瓶盖兑换1瓶啤酒,13瓶啤酒、3空瓶、1瓶盖

2空瓶兑换1瓶啤酒,14瓶啤酒、2空瓶、2瓶盖

2空瓶兑换1瓶啤酒,15瓶啤酒、1空瓶、3瓶盖

借一空瓶,还一空瓶,得一瓶啤酒,16瓶啤酒、0空瓶、4瓶盖

4瓶盖兑换1瓶啤酒,17瓶啤酒、1空瓶、1瓶盖

借一空瓶,还一空瓶,得一瓶啤酒,18瓶啤酒、0空瓶、2瓶盖

借两瓶盖,还一瓶盖,得一瓶啤酒,19瓶啤酒、1空瓶、-1瓶盖

借一空瓶,还一空瓶一瓶盖,得一瓶啤酒,20瓶啤酒、0空瓶、0瓶盖

20瓶啤酒、0空瓶、0瓶盖

答案:20

用数学的解法:

无论理论还是实践都是20瓶。

理论算法:2个空瓶换1瓶酒,空瓶=1元,4个瓶盖换1瓶酒,瓶盖=0.5元。酒值0.5元。10/0.5=20,答案20,

具体操作:

顾客:老板,来20瓶啤酒!喝完后

顾客:老板,结账!

递给老板10元(5瓶),给老板20个瓶子(10瓶)和20个瓶盖(5瓶)。

5+10+5=20(瓶)

时间: 2024-11-05 09:31:21

啤酒2块一瓶,4个瓶盖可换1瓶,2个空瓶可换1瓶,10块钱可以喝多少瓶?的相关文章

javascript计算啤酒2元一瓶,4个盖换一瓶,2个瓶换一瓶,10元钱最多喝多少瓶

var n = 0//当前剩下多少瓶加上喝赢了多少瓶 var x = 5//初始多少瓶 var y = 0//除了喝掉的,剩下多少瓶 var z = 0;//总数 var arr = []//定义一个数组存放值 arr.push(x);//先把最初始瓶数添加到数组 //程序1 var fn = function(s){ y = s -4; //剩下多少瓶 s = y + parseInt(s/4) + parseInt(s/2);//剩下多少瓶加上赢了多少瓶 n = s//赋值给上面的n arr

10元最多可喝多少瓶啤酒?(不可借酒+可借酒)

背景 <爱情公寓5>中有个剧情:每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒.10元最多可喝多少瓶啤酒? 脑海模拟起来的确有点费劲.心算结果是15瓶,而剧情实践居然是20瓶!结合弹幕说的酒吧可能可以借酒,故猜测借酒使最终喝了20瓶. 如果改变拥有的钱数或啤酒价格时,答案又是什么呢? 此时,不禁想用编程的方法解决一下. 思路 分两种情况:酒吧可以借酒:酒吧不可以借酒: 酒吧不可以借酒 此时,当剩余酒盖数<4且剩余空瓶数<2时,计算就结束了 酒吧可以借酒 这种情况比较麻烦,需要考虑1

每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒? php

//根据题意设定初始变量值//然后 一个while循环去操作//每换得一个瓶子,换的那个减去要做相应的数目//然后喝了啤酒后, 各数量加1//直到不符合要求.跳出循环 1 class Beer{ 2 3 protected $uni_gai = 4; //每4个瓶盖1瓶 4 protected $uni_bottle = 2; //每两个瓶子换1瓶 5 protected $uni_beer = 2; //每瓶2块钱 6 protected $rs = array();//存取结果 7 prot

可以喝多少瓶啤酒

可以喝多少瓶啤酒 问题 4个瓶盖,或者2个酒瓶,可以换一瓶啤酒, 现在有10块钱,啤酒2块钱一瓶,问: 共可以喝多少瓶啤酒? 解法一 问题分析 手里有10块钱,既然要喝尽可能多的啤酒,就要买尽可能的多买,所以直接全部买成啤酒,共可买5瓶.现在共有5瓶啤酒,那么可以进行以下的操作(序号越低,优先级越高): 如果有酒,则全部喝掉: 如果有 >= 4个瓶盖,则换成 n/4 瓶啤酒: 如果有 >= 2个酒瓶,则换成 n/2 瓶啤酒: 显然,如果用程序模拟,实现起来很简单. 结果 代码: # encod

给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐

package com.Summer_0417.cn; /** * @author Summer * 给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐. */public class Test_Method12 { public static void main(String[] args) { int money = 20, price = 3; // bottle表示每一次购买的可乐瓶数 int bottle = 0; // change表示每次购买完

java:50瓶可乐,每喝三瓶给你一瓶,请问最后喝了多少瓶.

package jihuoma; //50瓶可乐,每喝三瓶给你一瓶,请问最后喝了多少瓶. public class Test1 { public static void main(String[] args) { int count=50;//统计喝了多少瓶,初值50瓶 int sum=50;//初值50瓶可乐 while(true) { sum=sum-3;//喝三瓶后送一瓶,即下面的count++ count++;//送一瓶 sum=sum+1;//送了一瓶后,那么剩余的可乐数量加1 if(

【C语言】【面试题】每瓶汽水1元,两个空瓶可以置换一瓶汽水,现在有20元,最多能喝多少瓶汽水

#include <stdio.h> #define MAX  20 int main() { int money=MAX; int count=MAX; while(1) { if(money%2!=0) { count=count+money-1; break; } else { money=money/2; count+=money; } } printf("%d\n",count); return 0; }

C语言:每瓶汽水1元,两个空瓶可以置换一瓶汽水,现在有20元,最多能喝多少瓶汽水。

#include <stdio.h> #define MAX  20 int main() {  int money=MAX;  int count=MAX;  while(1)  {   if(money%2!=0)   {    count=count+money-1;    break;    }    else   {    money=money/2;    count+=money;    }  }   printf("%d\n",count);  return

用calloc分配10块大小为4字节的内存空间,打印指针地址,并且打印出内存中的内容

#include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { int  i; int *str = NULL; str = (int*)calloc(10, sizeof(int)); if(str==NULL) { printf("calloc error!\n"); return -1; } printf("start addr: %p\n",