笔试总结(4)

来源:互联网 发布:windows关机日志 编辑:程序博客网 时间:2024/06/10 05:31

 

1.      一根不均匀的绳子烧完1个小时,怎样计时:1小时15
本来以为以前做过,但突然就短路了,因为想到以前的题是让计时1小时45分,自己想到的方法是:
       a点燃一端,开始计时,a全部烧完时停止,绳b两端都点燃,同时点燃绳c的一段,当绳b燃尽的时候再开始计时,同时点燃绳c的另一端,当绳c烧完时停止计时,为15分钟。
       但这样就有一些时间间隔,换句话说时间不是连续的,所以当时脑子有点蒙。
       回来之后才转过弯来,其实可以在绳a燃烧时,就开始进行下一步的准备,于是有解:
       a点燃一端,开始计时,同时点燃绳b的两端,绳c的一端,当绳b燃尽的时候(绳b肯定比绳a早燃完),将绳c熄灭(但愿可以这样做),等待绳a燃完,当绳a烧完时,同时点燃绳c的两端,当绳c燃完的时候就是1小时15分。
2.2克和7克的砝码,一个没有游标的天平,140克的沙子,怎样只称量两次,将沙子分成100克和40克?
       到现在都没想出来。
不过有同学说要是有四次称量的机会,就行:
第一次:用2克和7克砝码称量出5克沙子(呵呵,天平一边放2克的,另一边放5克的,往2克的一端放沙子就能称出来5克沙子)
第二次:用5克沙子再称出5克沙子
第三次:用10克沙子再称量出10
第四次:用20克沙子称量出20克来,这样就有40克了,任务完成。
传说是微软的智力题:有2克和7克的砝码,140克沙子,怎样只称量三次,将沙子分成50克和90克?
答:
第一次:用2克和7克的砝码称量出9克的沙子,
第二次:用9克沙子和7克砝码称量出16克沙子
第三次:用16克沙子和2克砝码、7克砝码称量出25克沙子
这样就得到50克沙子,完成任务。
3.选择排序
       因为自己当时还没看选择排序,只是看完了比较排序,所以没做出来,有点郁闷,回来赶紧补上了。
       (关于排序之选择排序)
4.SQL:选出选了所有课程的学生
select s.id,s.name
from hibernate_student s
where s.id in(select r.student_id
              from hibernate_relation r
              group by r.student_id
              having count(r.student_id)=(select count(*) from hibernate_course)
              );
5.U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。四个人的步行速度各不同,若两人同行则以较慢者的速度为准。 Bono需花1分钟过桥 Edge需花2分钟过桥 Adam需花5分钟过桥 Larry需花10分钟过桥他们要如何在17分钟内过桥呢(到网上搜逻辑题的时候搜出来的,顺便做做,特意向一个同学请教的,不得不佩服,同学太NB了)
答:
       记:a:1分钟;b2分钟;c5分钟;d10分钟
ab先过去,a回来,(3分钟)
cd过去,b回来(12分钟)
ab过去(2分钟)
总共17分钟
(传说也是微软的题目,只有在五分钟内答上来才可能被录用)
6.编程题:
编写一个类MyThread 继承Thread类,类中有两个属性:String线程名:str;int时间:m
覆盖run()方法,其中方法中完成:a让线程sleep1000ms,b打印出当前线程的名字
然后new三个MyThread的对象,测试MyThread类。
 
源码:
package com.zhaozy.bishi;
/**
 *
 * @author zhaozy
 *
 */
publicclass MyThread extends Thread {
 
    // str表示线程的名字
    private String str;
    privateintm;
    public MyThread(String str, int m) {
       this.str = str;
       this.m = m;
    }
    @Override
    publicvoid run() {
       try {
           Thread.sleep(1000);
           System.out.println(str);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
    }
    publicstaticvoid main(String[] args) {
       MyThread t1 = new MyThread("线程1", 1000);
       MyThread t2 = new MyThread("线程2", 2000);
       MyThread t3 = new MyThread("线程3", 3000);
 
       t1.start();
       t2.start();
       t3.start();
    }
 
}
 
自己当时写的时候,只记得sleep方法抛异常,就干脆在run方法声明上Throws Exception了,回来再试的时候才知道,sleep方法的异常只能try-catch,不能再向上抛出,而且需要捕获InterruptedException异常。
         printStackTrace,多写写,省的自己忘了。
    还有,当时写的时候忘了Thread类是那个包里的,因为想写得完整点,打个包,写个import什么的。回来一查才知道,Thread 是java.lang包里的,不用import,-_-|||
 
7.编程题:用Java代码实现:编写方法,打印出昨天的当前时刻。
源码:
publicvoid testLastDay(){
       Date date=new Date();
       SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
       System.out.println(format.format(date));
       /*long c=1000*60*60*24;
       long a=date.getTime();
       long b=a-c;*/
      
       long y=date.getTime()-(1000L*60*60*24);
      
       Date d1=new Date(y);
       System.out.println(format.format(d1));
      
    }
 
    当时脑子有点短路,没写出来,╮(╯▽╰)
以上代码的Import
import java.text.SimpleDateFormat;
import java.util.Date;
其实自己也忘了这些类的具体包在哪,所以就没写。
原创粉丝点击