有1000瓶水,3个瓶子可以再换1瓶,一共可以喝多少瓶?


undefinedundefined

朋友说了一个面试算法题,题目大概意思为:"有1000瓶水,3个瓶子可以再换1瓶,一共可以喝多少瓶?"一时兴起,就分析了一下,并且代码实现了。

分析如下:

1000分为能被3整除的,和不能整除的。1000=999+1:999又可以换333瓶水,1可以先放着,等和后面换的凑成3的倍数,就可以接着换了(没换到也计入总数)。然后333瓶接着换..., 结果为1499

写成程序分析如下

方法1:假设一开始有n瓶水,f(n) = n/3*3 + f(n/3 + n%3),当n<3,直接返回n

方法2:模拟真实喝水过程,1瓶1瓶的喝,累计到3个空瓶子就去再换1瓶,然后手里水的个数就加1。喝1瓶水total加1,直到水为0.

程序如下:

复制代码
 1 public class Main {
 2     public static void main(String[] args) {
 3         System.out.println(f(1000));
 4         System.out.println(g(1000));
 5     }
 6 
 7     //算法1
 8     static int f(int n) {
 9         if (n < 3) return n;
10         int m = n / 3 * 3;
11         int t = n % 3 + n / 3;
12         return m + f(t);
13     }
14 
15     //算法2
16     static int g(int n) {
17         int total = 0;
18         int counter = 0;
19         while (n > 0) {
20             --n;
21             ++total;
22             ++counter;
23             if (counter == 3) {
24                 counter = 0;
25                 ++n;
26             }
27         }
28         return total;
29     }
30 }
复制代码

 

 

posted @   dreamkunk  阅读(1124)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示

"『一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!』"