【牛客网OJ题】汽水瓶

问题描述

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

输入描述:

 
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n 1<=n<=100 ),表示小张手上的
空汽水瓶数。 n=0 表示输入结束,你的程序不应当处理这一行。

输出描述:

对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出 0

示例1:

输入
3
10
81
0
输出
1
5
40

分析

当有 n 个空瓶时候,我们设总共可以喝 total 瓶饮料,那么当 n>2 时,说明我们可以去换饮料喝。 3 个换一瓶,那么可以换n/3 瓶饮料。接下来,这些饮料喝完后,势必还有空瓶。
那么喝完n/3 瓶饮料之后的空瓶数是多 少?
答案是:n/3+n%3.
这里需要注意: n/3 代表换来的饮料,但是这些喝完之后,不就是空瓶吗?
相同的为什么需 要n%3? 因为比如 n==4, 最后的空瓶数应该是: 2. 不就是 n/3+n%3 吗?到这里,我们在看一下。 n>2 时,可以去换, 那么n==2 时,我们可以去商铺借一瓶饮料。那么又多喝了一瓶。 

代码

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
        int n = sc.nextInt();
        System.out.println(Number(n));
        }
    }
    
    
    public static int Number(int n){
        int target = 0;
        while(n>2){
            target = target + n/3;  //兑换瓶子数
            n = n/3 + n%3;   //空拼子数
        }
        if(n == 2){
            target++;
        }
        return target;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值