偶然在CSDN看到一个帖子,说有个某互联网巨头公司的笔试题目--倒水问题
题目:现有M升水,N个杯子,把水倒入杯子中,假设单个杯子足够盛满M升水,且杯子可以为空,杯子之间没有区别,求有多少种倒发。
输入:7升水,3个杯子,得到结果8个
体现出算法基础的薄弱了,敏思苦想了1整天。
0 0 (M减去前两项)
0 1 (M减去前两项)
0 2 (M减去前两项)
0 3 (M减去前两项)
1 0 (M减去前两项)
1 1 (M减去前两项)
........
大概就是这么个情况
这里引入一个问题就是每有一个杯子就要一次for循环,因为是N个杯子,还不知道N是几,这就是题目所说的不确定的N次for循环嵌套的问题
下面给代码吧
package com; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Test; public class DaoShui { /** * M 升水,N个杯子 */ int M = 7; int N = 3; List<Object[]> list = new ArrayList<Object[]>(); private int[] arr = new int[N]; int result = 0; /** * 不特定的多次for循环嵌套 * @param j */ void XunHuan(int j) { if (j == arr.length) { List<Integer> values = new ArrayList<Integer>(); for (int i : arr) { result = result + i; values.add(i); } if (result == M) { list.add(values.toArray()); } result = 0; return; } while (arr[j] <= M) { XunHuan(j + 1); arr[j]++; if (j + 1 < arr.length) { arr[j + 1] = 0; } } } /** * 测试类 */ @Test public void show() { XunHuan(0); List<Object[]> list2 = new ArrayList<Object[]>(); boolean flag = true; /* * list是取出了所有情况,但是这并不是我们想要的 * 我们要去重,即007和070和700都是相同的 * 首先我们数组排序,然后比较数组的值是否一致 */ for (Object[] a : list) { Arrays.sort(a); for (Object[] obj : list2) { if (Arrays.equals(obj, a)) { flag = false; break; } } if (flag) { list2.add(a); } flag = true; } for (Object[] o : list2) { for (Object ob : o) { System.out.print(ob); } System.out.println(); } } }
这个可能不是最好的算法,但是暂时解决了心中疑问了
输出结果:
007
016
025
034
115
124
133
223
一共8种
相关推荐
CSDN 编程大赛 倒水问题,这道题不难,也正是这个原因,我这道题出了些问题,后面改进,可惜却没机会在测试它,因为这题下线了
NULL 博文链接:https://touch-2011.iteye.com/blog/1038893
java项目_五五开倒水 java项目_五五开倒水 java项目_五五开倒水
在网上看到这个用C#做的倒水解密游戏,感觉不错,分享一下了。
1、 编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分) a12 b8 c5 12 0 0 * * * ( “*”表示当前状态下每个容器的盛水量) ........
倒水解密游戏源码 游戏介绍: 《倒水解密》是一款很不错的益智类游戏 有N个容量不同的瓶子,指定「将a升水倒入容量为b的瓶子」。 游戏要求通过装水、倒水,达成给定的目标。 游戏操作方式如下: ?在瓶子上双击...
有两个水壶,一个盛满可以4公斤水,另一个3公斤水,水壶没有任何标记。怎样在能装4公斤的水壶里恰好只装2公斤水。使用状态空间法和盲目广度优先搜索算法解决这个问题。
自己做的3D倒水是初学者的首选 和容易懂的
用VC控制台实现的倒水程序 “倒水”算法代码实现
有3颗星强迫症的玩家兼程序员,写出这么个自动求解的小程序,以后这个问题再也不是问题了。 点击这里试试杯子倒水问题自动求解吧 算法基本逻辑: 每个杯子有倒满、倒空、倒入其它杯子的操作,所以总共是: 杯
初学IOS做的一个小玩意,8.5.3 三个水杯互相倒水,直至2个水杯都是4
两个杯子倒水问题,两个版本解决方案,BFS遍历方式,csdn
野比的倒水解密游戏,纯GDI+,自己DIY游戏。
#资源达人分享计划#
这是一份使用PowerPoint自带绘图工具绘制的一个,透明质感的玻璃瓶,玻璃瓶内的液体正在向外倾泻。 本PPT素材,适合用于在PPT中说明,某件事物包含哪些内容。或并列关系PPT内容表达。 关键词:瓶子、玻璃瓶...
主席台倒水礼仪-.docx
Jugs问题求解C++
倒水leetcode 代码挑战 我的个人编码脑筋急转弯集 :collision: 8/9/2018 - 字转换 将 wordA 转换为 wordB 给定字典中两个长度相等的单词,编写一种方法,通过一次只更改一个字母将一个单词转换为另一个单词。 你每...
循环智能小车