经典算法题--换汽水瓶

“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

 

Java版

package Test;

import java.io.BufferedInputStream;
import java.util.Scanner;

public class Glass {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(new BufferedInputStream(System.in));
        while (scanner.hasNext()) {
            int glass_bottom_num = scanner.nextInt();
            if (glass_bottom_num == 0) {
                break;
            }
            System.out.println(countGlass(glass_bottom_num));
        }
    }

    private static int countGlass(int glass_bottom_num) {
        int count = 0;
        while (glass_bottom_num >= 3) {
            int temp = glass_bottom_num / 3;  //计算商
            count += temp;  //兑换的瓶数加上商
            int remainder = glass_bottom_num % 3;  //计算余数
            glass_bottom_num = remainder + temp;  //空瓶数 = 余数 + 商
        }
        if (glass_bottom_num == 2) {
            count += 1;
        }
        return count;
    }
}

 采用递归进行计算

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n;
        while(sc.hasNext())
        {
            n=sc.nextInt();
            System.out.println(Drink(n));
        }
         
    }
     
    public static int Drink(int n)
    {
        if(n<=0)
            return 0;
        else if(n==3)
            return 1;
        else if(n==2)
            return 1;
        else//此时表明对应为3的倍数,递归
        {
            int h=0;
            h=n/3;
            return h+Drink(n-3*h+h);
        }
             
         
    }
}

 

Python版

while True:
    try:
        empty_bottle_num = int(input())
        if empty_bottle_num:
            drink_bottom_num = 0
            while empty_bottle_num >= 3:
                temp = empty_bottle_num // 3
                drink_bottom_num += temp
                empty_bottle_num = empty_bottle_num % 3 + temp
            if empty_bottle_num == 2:
                drink_bottom_num += 1
            print(drink_bottom_num)
        else:
            break
    except:
        break

 

posted @ 2020-03-24 21:55  大西young  阅读(1381)  评论(0编辑  收藏  举报