經典算法題--換汽水瓶


“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM