首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 经典面试智力题(过桥问题)及完整java代码
【标  题】:经典面试智力题(过桥问题)及完整java代码
【关键字】:java
【来  源】:http://blog.csdn.net/classic1999/archive/2007/02/04/1502141.aspx

经典面试智力题(过桥问题)及完整java代码

在一家公司笔试碰到的,当时由于时间紧没有做出来,估计没有什么希望了。回到家里写了一个完整的程序,希望对以后的人有所帮助吧。(注 网上也有一些类似的例子,感觉那些写的不是很好,不是很切题)

问题描述:在漆黑的夜里,五位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无 论如何也不敢过桥去的。不幸的是,五个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8、10分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥,并用java程序描述。

程序如下:

public class PastBridge {

    
public static void main(String[] args) {
        
// 假设数组从小到大排序
        int[] example1 = 12510 };
        String[] strExample1 
= "A""B""C""D" };
        
int[] example2 = 125810 };
        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]);

    }

}

如用更好的方式请告诉我,谢谢

 

基于Ajax+J2EE的MicroERP源码下载:【上一篇】
computer例子用spring+hibernarte做的改进工作:【下一篇】
【相关文章】
  • JAVA学习感悟(1)
  • Java Progress:clone()
  • Java2Script Pacemaker - 基于 SWT 开发 RIA 应用
  • JavaScript的方法和技巧
  • Java 专业人士必备的书籍和网站
  • 代码积累: 在ASP.NET使用javascript的一点小技巧
  • JAVA性能优化-通用篇
  • 学习Java6(一) WebServices (6)传递List(变通方法实现)
  • Effective Java 8-13
  • Javascript中的事件监听与call方法
  • 【随机文章】
  • Google Page Creator
  • 开心就贴(一)
  • Windows的Internet连接共享设置
  • linux下配置cvs
  • 测试数据库连接的Shell脚本(1)
  • IDS入侵特征库创建实例解析(1)
  • Ajax与WebGIS
  • Painter 7和8 混合完成的美少年教程(2)
  • 随心所欲拥有数字音乐—轻松压缩MP3
  • 装上了SuSE Linux Enterprise Server 10
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.