有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 }
分类:
简单算法题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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框架的用法!