关于一个java的面试题,求求高手指点?

zhang1317725 2012-08-12 06:10:38
假设一个30层的楼房有1部电梯,在5分钟内有10人(假设每层只有1人)从不同的楼层需要上楼或者下楼。为了简单一点,我们假设他们上楼

都是上到最高层,下楼都是下到第一层,电梯始终均速运行每层上行、下行都是30秒,如果有上、下人,每次留停30秒。试用Java算法实现将

所有人送达目的地,并输出电梯共运行的时间,所有人共等待的时间
...全文
236 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
艾码仕 2012-08-13
  • 打赏
  • 举报
回复
那么难的面试题,我怎么没遇到过
SkyWaterOwen 2012-08-13
  • 打赏
  • 举报
回复

竟然发了两遍...
SkyWaterOwen 2012-08-13
  • 打赏
  • 举报
回复
/**
* @author Owen
*/
public class Lift {
public static void main(String[] args) {
Lift lift = new Lift();
lift.init();
}

private void init() {
integer = new boolean[30];
java.util.HashSet<Integer> set = new java.util.HashSet<Integer>();
while (set.size() < 10) {
int i = new java.util.Random().nextInt(30);
set.add(i);
}
int counts = 0;
for (int i = 0; i < 30; i++) {
integer[i] = false;
}
for (Integer i : set) {
integer[i] = true;
counts++;
}
LiftUp();
}

protected void LiftUp() {
boolean b = hasPeople();
if(b) {
WaitTime += 30;
UpDown();
}
where ++;
RunTime += 30;
WaitTime += 30;
if (where == 29) {
Equal0(false);
howMany();
LiftDown();
} else {
LiftUp();
}
}

protected void LiftDown() {
boolean b = hasPeople();
if(b) {
WaitTime += 30;
UpDown();
}
where --;
RunTime += 30;
WaitTime += 30;
if (where == 0) {
Equal0(true);
howMany();
LiftUp();
} else {
LiftDown();
}
}

protected void Equal0(boolean b) {
if (b) {
if (DP != 0) {
AP -= DP;
DP = 0;
WaitTime += 30;
}
} else {
if (UP != 0) {
AP -= UP;
UP = 0;
WaitTime += 30;
}
}
}

protected boolean hasPeople() {
if (integer[where]) {
integer[where] = false;
return true;
} else {
return false;
}
}

protected void UpDown() {
if(integer[0]){
UP++;
} else if(integer[29]){
DP++;
}
int i = new java.util.Random().nextInt(2);
if((!integer[0]) & (!integer[29]) & (i == 0)) {
DP++;
}
else if((!integer[0]) & (!integer[29]) & (i == 1)) {
UP++;
}
}

protected void howMany() {
if(AP == 0) {
Print();
}
}

protected void Print() {
System.out.println("运行时间: " + RunTime + " 等待时间: " + WaitTime);
System.exit(0);
}

int where = 0;
boolean[] integer;
int RunTime = 0;
int WaitTime = 0;
int AP = 10;
int UP = 0;
int DP = 0;
}
SkyWaterOwen 2012-08-13
  • 打赏
  • 举报
回复
/**
* @author Owen
*/
public class Lift {
public static void main(String[] args) {
Lift lift = new Lift();
lift.init();
}

private void init() {
integer = new boolean[30];
java.util.HashSet<Integer> set = new java.util.HashSet<Integer>();
while (set.size() < 10) {
int i = new java.util.Random().nextInt(30);
set.add(i);
}
int counts = 0;
for (int i = 0; i < 30; i++) {
integer[i] = false;
}
for (Integer i : set) {
integer[i] = true;
counts++;
}
LiftUp();
}

protected void LiftUp() {
boolean b = hasPeople();
if(b) {
WaitTime += 30;
UpDown();
}
where ++;
RunTime += 30;
WaitTime += 30;
if (where == 29) {
Equal0(false);
howMany();
LiftDown();
} else {
LiftUp();
}
}

protected void LiftDown() {
boolean b = hasPeople();
if(b) {
WaitTime += 30;
UpDown();
}
where --;
RunTime += 30;
WaitTime += 30;
if (where == 0) {
Equal0(true);
howMany();
LiftUp();
} else {
LiftDown();
}
}

protected void Equal0(boolean b) {
if (b) {
if (DP != 0) {
AP -= DP;
DP = 0;
WaitTime += 30;
}
} else {
if (UP != 0) {
AP -= UP;
UP = 0;
WaitTime += 30;
}
}
}

protected boolean hasPeople() {
if (integer[where]) {
integer[where] = false;
return true;
} else {
return false;
}
}

protected void UpDown() {
if(integer[0]){
UP++;
} else if(integer[29]){
DP++;
}
int i = new java.util.Random().nextInt(2);
if((!integer[0]) & (!integer[29]) & (i == 0)) {
DP++;
}
else if((!integer[0]) & (!integer[29]) & (i == 1)) {
UP++;
}
}

protected void howMany() {
if(AP == 0) {
Print();
}
}

protected void Print() {
System.out.println("运行时间: " + RunTime + " 等待时间: " + WaitTime);
System.exit(0);
}

int where = 0;
boolean[] integer;
int RunTime = 0;
int WaitTime = 0;
int AP = 10;
int UP = 0;
int DP = 0;
}
lws5254 2012-08-13
  • 打赏
  • 举报
回复
balabala_sean 2012-08-12
  • 打赏
  • 举报
回复
写完感觉数组不理想,用set集合吧,循环一个删除一个,这样子

性能会好点
balabala_sean 2012-08-12
  • 打赏
  • 举报
回复
一个数组 0-30

for(int x=0;x<10;x++)循环这个数组

循环之中 if判断不能和上一个相等

数字乘以时间即可
SkyWaterOwen 2012-08-12
  • 打赏
  • 举报
回复
再补充问一下,上下人的30秒,算不算进电梯的运行时间?
SkyWaterOwen 2012-08-12
  • 打赏
  • 举报
回复
问个问题哦,如果30层有人A,A下去的时候到了20层,又有人B了,那是等B上去后再下去、还是A不等B直接下去呢?

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧