Java面试题:猫吃老鼠问题
问题:现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。
我的解法:
1.简单的方法就是模拟这个过程。使用一个数组代表老鼠是否被吃掉,循环遍历。
2.改进一下的方法,其实这个问题就是一个m=2的约瑟夫环问题。
package com.easyProblem;
/*
* 现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,
* 请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号
*/
public class CatEatMouseProblem {
private int[] m;
public static void main(String[] args) {
CatEatMouseProblem cm = new CatEatMouseProblem();
System.out.println("=======低效的方法========");
long startTime =System.currentTimeMillis();
System.out.println(cm.easyWork(1111178));
long endTime=System.currentTimeMillis();
System.out.println("耗时:" + (endTime-startTime));
System.out.println("=======改进的方法========");
startTime =System.currentTimeMillis();
System.out.println(cm.betterWork(1111178));
endTime=System.currentTimeMillis();
System.out.println("耗时:" + (endTime-startTime));
}
public int easyWork(int n){
m = new int[n];
int mouse = n;
int flag = 0;
m[0] = 1;
mouse--;
while(mouse>1){
flag = next(next(flag));
m[flag] = 1;
mouse--;
}
return next(flag)+1;
}
public int next(int start){
for(int i=start+1; i<start+m.length; i++){
int pos = i%(m.length);
if(m[pos]!=1) {
return pos;
}
}
return -1;
}
public int betterWork(int n){
int m = 2;
int s = 0;
for(int i=2; i<=n-1; i++) s=(s+m)%i;
return s+2;
}
}
=======低效的方法========
125204
耗时:953
=======改进的方法========
125204
耗时:31
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
首先,做一点说明。Flex是不能直接连接数据库的,这一点大家需要知道,它只能间接地连接数据库。Flex中提供了三种方式:HttpService,WebService 和RemoteObject。其中HttpService可以直接获取XML中的数据,还可以通过JSP,ASP以及PHP读取数据库中的数据,这个比较简单,而且网上也有很多例子,我就不多说了。WebServi ......
package day10;
import java.util.*;
public class MyLinkedList implements List
{
static class Node
{
public Object data;
public Node next;
public Node(Object data)
{
this.data=data;
}
}
private Node head;
public MyLinkedList()
{
head=new Node(0);
}
public void add(int ind ......
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.Serializable;
import java.rmi.Na ......