黑马程序员技术交流社区
标题:
给大家出个面试时的逻辑题目
[打印本页]
作者:
杜小井0703
时间:
2015-10-13 21:59
标题:
给大家出个面试时的逻辑题目
有三个杯子
一个8升一个5升一个三升
只有8升的杯子里装满了水
问怎么用这3个杯子
得到两杯4升的水
作者:
JYcainiao
时间:
2015-10-13 22:06
怎么得到的好说 关键是思路是什么、
作者:
JYcainiao
时间:
2015-10-13 22:20
本帖最后由 JYcainiao 于 2015-10-13 23:10 编辑
8 5 3 容量
5 0 3 水
2 3 3 水
2 5 1 水
7 0 1 水
7 1 0 水
4 1 3 水
4 4 0 水
作者:
iceknc
时间:
2015-10-13 22:27
楼上的好高端
作者:
dai2686779
时间:
2015-10-13 22:30
这不是个数学题么。。。。
作者:
SF_NEVERMORE
时间:
2015-10-13 22:32
楼上的楼上说的有道理。
作者:
JYcainiao
时间:
2015-10-13 22:37
代码要怎么写啊 难道是for嵌套?
作者:
JYcainiao
时间:
2015-10-13 23:17
我觉的是不是用数组做出来的啊
作者:
1312564637
时间:
2015-10-14 12:05
那个八升的杯子不要动,把那个5升杯子的水,拿一升倒到那个三升的杯子不就行了
作者:
朦胧色彩
时间:
2015-10-14 14:26
使用递归!
import java.util.*;
class Test_1
{
// 三个杯子
private static int CupA = 8;
private static int CupB = 5;
private static int CupC = 3;
// 保存倒水的状态,不能又重复的,避免死循环
private static ArrayList<String> history = new ArrayList<String>();
public static void main(String[] args)
{
putWater(8,0,0,"8-0-0");
}
public static void putWater(int a, int b, int c, String str)
{
// 存在了这种状态了,不能继续,否则死循环
if(history.contains(str))
return;
//System.out.println(str);
if(a == 4 && b == 4)
{
history.add(str);
System.out.println(history);
System.out.println("OK");
return;
}
history.add(str);
// 优先填补0容量的杯子,A给B
if(a != 0 && b == 0)
{
int tempa = a + b > CupB ? a + b - CupB : 0;
int tempb = a + b > CupB ? CupB : a + b;
putWater(tempa, tempb, c , tempa + "-" + tempb + "-" + c);
}
else
{
// B给C
if(b != 0 && c == 0)
{
int tempb = b + c > CupC ? b + c - CupC : 0;
int tempc = b + c > CupC ? CupC : b + c;
putWater(a, tempb, tempc, a + "-" + tempb + "-" + tempc);
}
// A杯倒给B杯
else if(a == CupA)
{
int tempa = a + b > CupB ? a + b - CupB : 0;
int tempb = a + b > CupB ? CupB : a + b;
putWater(tempa, tempb, c , tempa + "-" + tempb + "-" + c);
}
// B杯倒给C杯
else if(b == CupB)
{
int tempb = b + c > CupC ? b + c - CupC : 0;
int tempc = b + c > CupC ? CupC : b + c;
putWater(a, tempb, tempc, a + "-" + tempb + "-" + tempc);
}
// C杯倒给A杯
else if(c == CupC)
{
int tempc = c + a > CupA ? c + a - CupA : 0;
int tempa = c + a > CupA ? CupA : c + a;
putWater(tempa, b, tempc, tempa + "-" + b + "-" + tempc);
}
}
}
}
复制代码
test.png
(2.08 KB, 下载次数: 6)
下载附件
2015-10-14 14:26 上传
作者:
看海的管家
时间:
2015-10-14 14:49
代码这么长
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2