吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1813|回复: 13
收起左侧

[Java 原创] java - 求能兑换几瓶汽水

[复制链接]
dxxbjl 发表于 2023-3-30 20:29
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。
小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
数据范围:输入的正整数满足 1≤n≤100
注意:本题存在多组输入。输入的 0 表示输入结束。


整理题目:
  • 三空瓶换一瓶;
  • 一次能借一瓶;
  • 一次性输入多组数据判断;
  • 判断n瓶空的水瓶能换几瓶;



思路:
         加入我有10瓶,10瓶/3 能换 3瓶 还余一个空瓶,此时我手上有 3满瓶+1空瓶,喝完就是 = 4空瓶,
         4空瓶 中拿3个 又能去换一瓶,剩一个空瓶,把这个满的喝完,手上有两个空瓶,向老板借一个空瓶
         刚好凑够三个,换一瓶,喝完,把这个空瓶喝完,走人。

代码:
[Java] 纯文本查看 复制代码
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 因为不确定我要输入几组数据
        while(sc.hasNext()){
            int num = sc.nextInt();
            //知道输入的数是0就不输入了
            if(num == 0){
                break;
            }else{
                //输入的数是0后,开始干活判断能换几瓶
                Judge(num);
            }
        }
    }
    public static void Judge(int num){
        int n = 0;  //兑换瓶数
        int mod =0; //剩余瓶数

        while(num>=3){
              n += num/3; //兑换了几瓶
            mod = num%3;  //未对换的瓶子
            num = num/3 + mod;//现在手上的瓶子等于 兑换了的瓶子 + 未兑换的瓶子
        }
        if(num == 2){//如果手上只有两个瓶子,可向老板借一个
            n++;//借了一个后凑够了3个又能兑换一瓶
        }
        System.out.println(n);//打印兑换的瓶数
    }
}






思路二:
       能向老板借1瓶!
       如果我有10瓶,分五组,一组两瓶,那我去老板那借5次,一次借一瓶。
       凑够了五组 3 空瓶 ,喝完就是 5个空瓶 , 然后再把这五个空瓶还回去,
       没了,,,走人。
代码:
[Java] 纯文本查看 复制代码
 public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            int n = in.nextInt();
            if(n != 0){
                System.out.println(n / 2);
            }
        }
    }



免费评分

参与人数 2吾爱币 +7 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
撒旦の恶 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

侃遍天下无二人 发表于 2023-3-30 21:19
很明显这样开店是要赔死的,所以现实世界里没这种活动
ZhangHunTun 发表于 2023-3-30 22:14
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            if (n == 0) {
                break;
            }
            int count = 0; // 喝到的汽水数量
            int left = 0; // 剩余的空瓶数量
            while (n > 2 || left >= 2) { // 只要空瓶数量大于等于3或者借来的空瓶数量大于等于2就可以继续换汽水
                int exchange = (n + left) / 3; // 当前可以换到的汽水数量
                count += exchange; // 加上当前换到的汽水数量
                left = (n + left) % 3; // 更新剩余的空瓶数量
                n = exchange; // 更新手上拥有的空瓶数量
            }
            if (n == 2 && left == 1) { // 如果手上还剩2个空瓶且借来的空瓶数量为1,则可以再向老板借一个空瓶换一瓶汽水
                count++;
            }
            System.out.println(count);
        }
        sc.close();
    }
}
actor9527 发表于 2023-3-30 21:46
侃遍天下无二人 发表于 2023-3-30 21:19
很明显这样开店是要赔死的,所以现实世界里没这种活动

啊?这……
guangzisam 发表于 2023-3-30 22:42
考试遇到这种题,正确答案是什么?老板肯定不借!不赊账!再买一瓶不退货!找别人借需运气,现实生活中不太可能
小明无敌 发表于 2023-3-30 22:47
可以使用贪心算法解决这个问题。每次尽可能多地换取汽水,直到无法再换为止。

具体实现可以按照以下步骤:

读入n,如果n等于0,则输入结束,否则进行下一步。
使用一个变量ans来记录喝到的汽水瓶数,初始化为0。
当n大于等于3时,将n除以3并向下取整,得到k,表示可以用k个空汽水瓶换取k瓶汽水。
将ans加上k,表示喝到了k瓶汽水。
将n更新为n-k*3+ k,表示剩余的空汽水瓶数(注意要加上借来的空汽水瓶)。
回到第3步继续执行,直到n小于3为止。
输出ans,表示最多可以喝到ans瓶汽水。
如果输入的n为0,则结束程序。
下面是一个Python代码示例:
[Python] 纯文本查看 复制代码
while True:
    n = int(input())
    if n == 0:
        break
    ans = 0
    while n >= 3:
        k = n // 3
        ans += k
        n = n - k * 3 + k
    if n == 2:
        ans += 1
    print(ans)
潇潇暮雨寒 发表于 2023-3-31 05:47
和老板借一个空瓶,老板不借给你怎么办?
jffwoo 发表于 2023-3-31 08:27
思路2挺给力的
jffwoo 发表于 2023-3-31 08:30
小明无敌 发表于 2023-3-30 22:47
可以使用贪心算法解决这个问题。每次尽可能多地换取汽水,直到无法再换为止。

具体实现可以按照以下步骤 ...

n-k*3+ k里面没有借的概念啊???
jobs_steven 发表于 2023-3-31 08:31
代码是用来解决现实世界中的业务问题,这种无聊的问题在现实世界是没有的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表