在一家公司笔试碰到的,当时由于时间紧没有做出来,估计没有什么希望了。回到家里写了一个完整的程序,希望对以后的人有所帮助吧。(注 网上也有一些类似的例子,感觉那些写的不是很好,不是很切题)
问题描述:在漆黑的夜里,五位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无 论如何也不敢过桥去的。不幸的是,五个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8、10分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥,并用java程序描述。
程序如下:

public class PastBridge ...{

public static void main(String[] args) ...{
// 假设数组从小到大排序
int[] example1 = ...{ 1, 2, 5, 10 };
String[] strExample1 = ...{ "A", "B", "C", "D" };
int[] example2 = ...{ 1, 2, 5, 8, 10 };
String[] strExample2 = ...{ "A", "B", "C", "D", "E" };
GoBridge(example1, strExample1);
GoBridge(example2, strExample2);
}

/** *//**
* 计算所有人过桥的总用时
*
* @param personTimes
* 过桥人各自所用时间组成的数组
*/
private static void GoBridge(int[] personTimes, String[] personNames) ...{
int personsNum = personTimes.length;
int quickest = personTimes[0];// 用时最少的人
int quicker = personTimes[1]; // 用时第二少的人
int totalTimes = 0;// 总共用时
int roundedTimes = quicker * 2 + quickest;// 用时最少的两位往返的时间和
// 将执行逻辑按是否为偶数分成两种情况
boolean isEvenNum = personsNum % 2 == 0;
if (isEvenNum) ...{// 为偶数

for (int i = personTimes.length - 1; i >= 2;) ...{
totalTimes += personTimes[i];
totalTimes += roundedTimes;
printGoBridger(i, personNames,personTimes);
i = i - 2;
}
totalTimes += quicker;
System.out.println(personNames[0] + "," + personNames[1] + "过去 用时:"+personTimes[1]);
} else ...{// 为奇数

for (int i = personTimes.length - 1; i > 3;) ...{
int j = personTimes[i];
totalTimes += j;
totalTimes += roundedTimes;
printGoBridger(i, personNames,personTimes);
i = i - 2;
}
totalTimes += personTimes[2];
totalTimes += quicker + quickest;
System.out.println(personNames[0] + "," + personNames[2] + "过去 用时:"+personTimes[2]);
System.out.println(personNames[0] + "回来 用时:"+personTimes[0]);
System.out.println(personNames[0] + "," + personNames[1] + "过去 用时:"+personTimes[1]);
}
System.out.println("总共用时=" + totalTimes);
}

private static void printGoBridger(int i, String[] personNames,int[] personTimes) ...{
System.out.println(personNames[0] + "," + personNames[1] + "过去 用时:"+personTimes[1]);
System.out.println(personNames[0] + "回来 用时:"+personTimes[0]);
System.out.println(personNames[i] + "," + personNames[i - 1] + "过去 用时:"+personTimes[i]);;
System.out.println(personNames[1] + "回来 用时:"+personTimes[1]);
}
}
如用更好的方式请告诉我,谢谢