ACM空瓶换饮料问题

Description

Once upon a time, there is a special coco-cola store. If you return three empty bottles to the shop, you’ll get a full bottle of coco-cola to drink. If you have n empty bottles right in your hand, how many full bottles of coco-cola can you drink?

Input

There will be at most 10 test cases, each containing a single line with an integer n (1 ≤ n ≤ 100). The input terminates with n = 0, which should not be processed.

Output

For each test case, print the number of full bottles of coco-cola that you can drink. Spoiler Let me tell you how to drink 5 full bottles with 10 empty bottles: get 3 full bottles with 9 empty bottles, drink them to get 3 empty bottles, and again get a full bottle from them. Now you have 2 empty bottles. Borrow another empty bottle from the shop, then get another full bottle. Drink it, and finally return this empty bottle to the shop!

Sample Input

3

10

81

0

Sample Output

1

5

40

解题思路:当我们手中的空瓶数大于2时我们就可以拿去换满的可乐。每去换一次我们就少了三个空瓶。但是我们得到了一瓶满的可乐,把它喝完我们就又多了一个空瓶(即每去商店换一次我们就把空瓶数减一次3然后再加一次1)最后如果还剩了两个空瓶我们就可以先向商店借一瓶喝完,然后还给商店三个空瓶就可以了。

程序代码

#include <stdio.h>
int main()
{
      int n;
      while(scanf("%d",&n)&&n) //程序循环条件
      {
            int j=0;
            while(n>2)
            {
                  n=n-3;
                  j++;
                  n++;
            }
            if(n-1)
                  j=j+1;
            printf("%d\n",j);
      }
      return 0;
}
时间: 2024-11-05 14:01:07

ACM空瓶换饮料问题的相关文章

[算法]: 递归-空瓶换饮料

一瓶饮料1块钱,2个空瓶子换一瓶饮料,问:一定钱数最多喝多少瓶饮料 def drink_coke(money, empty_bottle=0): actual_money = money if money % 2 != 0: empty_bottle += 1 if empty_bottle == 2: actual_money += 1 empty_bottle = 1 if money == 0 : return actual_money return actual_money + drin

100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶

最近碰到一道题目.就是关于酒瓶的(100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶). 刚开始没头绪,仔细一想原来不过如此. 经过分析,所能买到的酒瓶等于    最后所有的空瓶数 java代码求解如下: import java.util.Scanner; public class Bottle {         //空瓶数 static int blank=0; //直接能买到的酒瓶数 static int sum=0; public static void main(String[

啤酒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 + "

1 元钱买一瓶汽水,两个空汽水瓶换一瓶汽水。现有 20 元钱,问最多可以喝到多少瓶汽水?

答案一:20+10+5+2+ 1+ 1= 39瓶 答案二:20+ 10+ 5+ 2+ 1+ 1+ 1= 40 一开始 20瓶没有问题,随后的 10瓶和 5瓶也都没有问题,接着把 5瓶分成 4瓶和 1瓶,前 4个空瓶再换 2瓶,喝完后 2瓶再换 1瓶,此时喝完后手头上剩余的空瓶数为 2个,把这 2个瓶 换 1瓶继续喝,喝完后把这 1个空瓶换 1瓶汽水,喝完换来的那瓶再把瓶子还给人家即可,所以最多可以喝的汽水数为: 20+ 10+ 5+ 2+ 1+ 1+ 1= 40.但是题目中并没有说可以赊账,因此

假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?

这大家可以这么想 一共有50瓶, 喝完三瓶 + 1 喝完三瓶 + 1 那么 50 - 3 + 1 -3 + 1 以此类推知道...最后剩余的可乐数小于3退出.那么依旧题意可以写出. package cccc; public class Buy { public static void main(String[] args) { int number = 50;         //初始饮料总数 int i=0;            //兑换次数 while(true){ n -= 3;    

java-喝饮料换空瓶问题

//1 public class yinliao1 { public static void main(String args[]) { int a=1000; int kong=1000; int he=1000; System.out.println("第1次:"+" He="+he+" KONG="+kong); for(int i=2;i<=1000;++i) { int lk=kong; he+=lk/3; kong=kong-k

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

【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