牛客網華爲機試【汽水瓶】

題目描述

有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完以後用3個空瓶子換一瓶滿的還給老闆。如果小張手上有n個空汽水瓶,最多可以換多少瓶汽水喝?

輸入描述:
輸入文件最多包含10組測試數據,每個數據佔一行,僅包含一個正整數n(1<=n<=100),表示小張手上的空汽水瓶數。n=0表示輸入結束,你的程序不應當處理這一行。

輸出描述:
對於每組測試數據,輸出一行,表示最多可以喝的汽水瓶數。如果一瓶也喝不到,輸出0。

示例
輸入

3
10
81
0

輸出

1
5
40

題目分析

採用遞歸的思想。
邊界條件是 n >= 2,當 n == 2 時,能喝的瓶數加1,結束循環。

while(n >= 2){
	if(n == 2){
		// 能喝到的瓶數+1
		count++;
		// 空瓶數目清空
		n = 0;
		continue;
	}
}

然後是使用空瓶數進行計算
n / 3 得到能換到的瓶數,然後全都喝掉,空瓶數目要加 n / 3
n % 3 表示,一次換瓶結束之後(不喝換來的水時),剩下的空瓶。

java 代碼

import java.util.Scanner;

/**
 * Created by Feng on 2020/2/17 15:00
 * CurrentProject's name is java8
 */
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while(input.hasNextInt()){
            // 空瓶數
            int n = input.nextInt();
            // 喝的瓶數
            int counts = 0;
            if(n <= 1000 && n >= 0){
                while(n >= 2){
                    // 2 個空瓶,借一個、還一個
                    if(n == 2){
                        counts++;
                        n = 0;
                        continue;
                    }

                    // 能換的瓶數
                    int tempCounts = n / 3;
                    counts += tempCounts;
                    // 喝完、調整空瓶數目
                    n = tempCounts + n % 3;
                }
            }

            System.out.println(counts);
        }
    }
}

結果

在這裏插入圖片描述

發佈了131 篇原創文章 · 獲贊 121 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章