百度面试题的java实现
2008-05-10 09:23
393 查看
有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。
java实现代码
public class test_ant
{
private int[] ants = new int[5];
// 1:左 2:右
private int enumDirection[][] = new int[32][5];
private void initDirection()
{
for (int i = 16, column = 0; i > 0; i = i / 2, column++)
{
int n = 1;
for (int j = 0; j < 32; j++)
{
if((j / i) % 2 == 0)
enumDirection[j][column] = 1;
else
enumDirection[j][column] = 2;
}
}
}
private boolean checkAnts()
{
for (int i = 0; i < 5; i++)
{
if (ants[i] > 0 && ants[i] < 28)
return true;
}
return false;
}
private void changeDirection(int row, int col)
{
if (enumDirection[row][col] == 1)
enumDirection[row][col] = 2;
else
enumDirection[row][col] = 1;
}
public void antClimb()
{
initDirection();
for (int n = 0; n < 32; n++)
{
int seconds = 0;
ants[0] = 3;
1d80f ants[1] = 7;
ants[2] = 11;
ants[3] = 17;
ants[4] = 23;
while (checkAnts())
{
seconds++;
for (int i = 0; i < ants.length; i++)
{
if (i < ants.length - 1)
{
// 蚂蚁相遇
if ((ants[i] == ants[i + 1])
&& ((enumDirection
[i] + enumDirection
[i + 1]) == 3))
{
changeDirection(n, i);
changeDirection(n, i + 1);
}
}
if (enumDirection
[i] == 1)
ants[i]--;
else
ants[i]++;
}
}
for (int j = 0; j < 5; j++)
System.out.print(enumDirection
[j]);
System.out.println("");
System.out.println(seconds);
}
}
public static void main(String[] args)
{
new test_ant().antClimb();
}
}
其中ants数组保存了5只蚂蚁当前在竿上的位置
enumDirection枚举了所有的32种初始化方向,1代表向左,2代表向右
最短11秒, 最大25秒
运行结果
11111
23
11112
17
11112
23
11122
11
11112
23
11122
17
11122
23
11222
17
11112
23
11122
21
11122
23
11222
21
11122
23
11222
21
11222
23
12222
21
11112
25
11122
25
11122
25
11222
25
11122
25
11222
25
11222
25
12222
25
11122
25
11222
25
11222
25
12222
25
11222
25
12222
25
12222
25
22222
25
阅读更多
java实现代码
public class test_ant
{
private int[] ants = new int[5];
// 1:左 2:右
private int enumDirection[][] = new int[32][5];
private void initDirection()
{
for (int i = 16, column = 0; i > 0; i = i / 2, column++)
{
int n = 1;
for (int j = 0; j < 32; j++)
{
if((j / i) % 2 == 0)
enumDirection[j][column] = 1;
else
enumDirection[j][column] = 2;
}
}
}
private boolean checkAnts()
{
for (int i = 0; i < 5; i++)
{
if (ants[i] > 0 && ants[i] < 28)
return true;
}
return false;
}
private void changeDirection(int row, int col)
{
if (enumDirection[row][col] == 1)
enumDirection[row][col] = 2;
else
enumDirection[row][col] = 1;
}
public void antClimb()
{
initDirection();
for (int n = 0; n < 32; n++)
{
int seconds = 0;
ants[0] = 3;
1d80f ants[1] = 7;
ants[2] = 11;
ants[3] = 17;
ants[4] = 23;
while (checkAnts())
{
seconds++;
for (int i = 0; i < ants.length; i++)
{
if (i < ants.length - 1)
{
// 蚂蚁相遇
if ((ants[i] == ants[i + 1])
&& ((enumDirection
[i] + enumDirection
[i + 1]) == 3))
{
changeDirection(n, i);
changeDirection(n, i + 1);
}
}
if (enumDirection
[i] == 1)
ants[i]--;
else
ants[i]++;
}
}
for (int j = 0; j < 5; j++)
System.out.print(enumDirection
[j]);
System.out.println("");
System.out.println(seconds);
}
}
public static void main(String[] args)
{
new test_ant().antClimb();
}
}
其中ants数组保存了5只蚂蚁当前在竿上的位置
enumDirection枚举了所有的32种初始化方向,1代表向左,2代表向右
最短11秒, 最大25秒
运行结果
11111
23
11112
17
11112
23
11122
11
11112
23
11122
17
11122
23
11222
17
11112
23
11122
21
11122
23
11222
21
11122
23
11222
21
11222
23
12222
21
11112
25
11122
25
11122
25
11222
25
11122
25
11222
25
11222
25
12222
25
11122
25
11222
25
11222
25
12222
25
11222
25
12222
25
12222
25
22222
25
阅读更多
相关文章推荐
- 百度面试题的java实现
- 百度面试题的java实现
- 百度面试题的java实现
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- 疑似Google多线程面试题的Java实现
- 剑指offer-面试题7:俩个栈实现队列(java)
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- 百度PCS API (REST SDK) Java实现文件遍历
- [经典面试题][百度]c++实现STL中的string类
- 剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现
- 百度面试题 c++ 实现引用类型与被引用的对象分离的一种方法
- 匿名内部类是否可以继承其它类是否可以实现接口 _JAVA面试题及答案
- Twitter算法面试题详解(Java实现)
- 【剑指offer】面试题2:实现Singleto模式 java
- 剑指offer--面试题3:二维数组的查找--Java实现
- 剑指offer面试题 java实现版 面试题2 实现Singleton模式
- 微软100题(83)百度面试题_memmove实现
- 剑指offer--面试题22:栈的压入、弹出序列--Java实现
- 百度面试题--5只蚂蚁走木棍问题的非递归解法(Java调试通过)
- 百度面试题——用C语言实现函数void * memmove(void *dest,const void *src,size_t n)