日期:2014-05-20  浏览次数:20601 次

求一个优秀算法,参与有分.
基本需求如下:
1.有四个人(甲乙丙丁)轮流做事情,按甲乙丙丁顺序,每人各有10件事情要做,但每人每次只允许做一件,并且从第一件开始做.

2.等到丁做完一件事后,休息1分钟,然后又从甲开始做剩下的事情,以此循环,直到四人都做完自己的所有事情.

以上为基本要求,附加扩展需求如下:
1.如果一件事做失败了,则记录它的做事者,以及失败原因,失败时间等,再输入到c:/note.txt,然后再跳过该件事,其它人继续进行.

2.当四人完成所有事情后,记录每人完成事情的所需的总时间以及成功率(或失败率),最好能用图表显示统计.

我想方法可能不少,但效率可能有别,此算法看似简单,但要运用的知识点却不少,线程,异常处理,循环应用,文件操作等等,
对一般人练练手应该还是有意义的啦.

大家有兴趣也来露两手如何?附加要求可以不考虑.本人的就不贴上去献丑了,呵

最后说下,本人认为该需求用于面试也不错,如果有人能在30分钟内完成,水平应该是相当不错的(使用时间越少,正确率越高,相对来说被面试者水平越高)
当然如果你认为是这是作业题或太简单了而不屑一顾的话,那你可以绕路了(此处已难以展现你才能了,人各有志吧,水平不同当然目标不同了,可以理解的,呵.)


------解决方案--------------------
有四个人(甲乙丙丁)轮流做事情,

这就不用线程了吧?


------解决方案--------------------
我完全不觉得这个跟线程有什么关系。。
------解决方案--------------------
4个人。。
同意楼上用线程!!
------解决方案--------------------
这样可不可以
Java code
public class FTest{
    public static void main(String[] args) {
        Logger log=new Logger();
        People a=new People("甲", log);
        People b=new People("乙", log);
        People c=new People("丙", log);
        People d=new People("丁", log);
        for(int i=0;i<10;i++){
            a.doMatter();
            System.out.println("----pause-----1min----");
            b.doMatter();
            System.out.println("----pause-----1min----");
            c.doMatter();
            System.out.println("----pause-----1min----");
            d.doMatter();
            System.out.println("----pause-----1min----");
        }
        log.addTime(-1);
        System.out.println(log);
    }
}
class People{
    private String name;
    private int count;
    private Logger log;
    public People(String name,Logger log){
        this.name=name;
        this.log=log;
    }
    public void doMatter(){
        System.out.println(name+"doing No."+(count+1));
        int cost=(int)(Math.random()*5+1);
        System.out.println("takes "+cost+" mins");
        log.addTime(cost);
        if(Math.random()>0.7){
            log.addError();
            System.out.println("fail!!");
        }else{
            System.out.println("success!!!");
        }
        log.addTime(1);
        count++;
    }
}
class Logger{
    private int time;
    private int error;
    public void addTime(int time){
        this.time+=time;
    }
    public void addError(){
        error++;
    }
    public String toString() {
        return "times:"+time+","+"errors:"+error;
    }
    
}

------解决方案--------------------
哇,靠,那么强
------解决方案--------------------
关注中,顶楼主!
------解决方案--------------------
帮顶,学习.
------解决方案--------------------
设四个变量分别表示四个人完成的情况,然后再用wait(),notify(),应该可以啊
------解决方案--------------------
汗~  关注中  帮顶 接分、、
------解决方案--------------------
学习中!
------解决方案--------------------
进来瞧瞧
------解决方案--------------------

------解决方案--------------------
这种些些小问题,楼主不是有些夸大吧?什么应聘之类的都扯上了,我虽然还没有毕业(不过都大四了),但是我看了下,找工作也不是那么容易的嘛!你这个问题其实没那么复杂,就是几个简单的语句在那里重用几下就行了,思路很简单的!我模拟了一个事件,假如是随机比较大小这样一件事!