⑴ java演算法題——龜兔賽跑
packagep1;
importjava.util.Scanner;
/**
*龜兔賽跑
*
*@authoryugi
*/
publicclassTortoiseHare
{
publicstaticfinalStringT="T";
publicstaticfinalStringR="R";
publicstaticfinalStringD="D";
privatestaticvoidrace(intv1,intv2,intt,ints,intl,
intstart1,intstart2,ints1,ints2,inttime,
booleanrest)
{
if(
v1<0||v2<0||t<0||s<0||l<0
||v1>100||v2>100||t>300||s>10||l>10000
||l%v1!=0||l%v2!=0
)
{
try
{
thrownewException("參數輸入不合標准!");
}
catch(Exceptione)
{}
}
else
{
//兔子或烏龜已經到達終點
if(s1>=l||s2>=l)
{
if(s1>s2)
{
System.out.println(R);
System.out.println(time+start1);
}
elseif(s1<s2)
{
System.out.println(T);
System.out.println(start2);
}
else
{
System.out.println(D);
System.out.println(start2);
}
return;
}
//兔子開始休息
if(!rest&&s1-s2>=t)
{
rest=true;
time+=s;
}
//兔子休息了s秒(不包括s秒,第s秒開始行動,題目意思不是s秒之後)
if(rest&&start2-start1>=s)
{
//開始跑了(不休息)
rest=false;
}
//兔子不休息的時候跑
if(!rest)
{
start1++;
s1=v1*start1;
}
//烏龜總在跑
start2++;
s2=v2*start2;
//遞歸調用
race(v1,v2,t,s,l,start1,start2,s1,s2,time,rest);
}
}
publicstaticvoidmain(String[]args)
{
System.out.println("輸入只有一行,包含用空格隔開的五個正整數v1,v2,t,s,l,"+
" 其中(v1,v2<=100;t<=300;s<=10;l<=10000且為v1,v2的公倍數)"+
" 退出輸入n/N,否則繼續:");
Scannerscanner=newScanner(System.in);
Stringline=null;
Stringreg="^([1-9]\d*|\d)\s+([1-9]\d*|\d)\s+([1-9]\d*|\d)\s+([1-9]\d*|\d)\s+([1-9]\d*|\d)$";
while(scanner.hasNextLine())
{
line=scanner.nextLine().trim();
if("n".equalsIgnoreCase(line))
{
break;
}
if(!line.matches(reg))
{
System.err.println("輸入不對,重新輸入:");
}
else
{
String[]input=line.split("\s+");
intv1=Integer.parseInt(input[0]);
intv2=Integer.parseInt(input[1]);
intt=Integer.parseInt(input[2]);
ints=Integer.parseInt(input[3]);
intl=Integer.parseInt(input[4]);
race(v1,v2,t,s,l,0,0,0,0,0,false);
System.out.println("退出輸入n/N,否則繼續:");
}
}
scanner.close();
}
}

⑵ java模擬龜兔賽跑問題用多線程實現
import java.util.Date;
public class Test extends  Thread{ private   int tortoise_walk = 0; // 烏龜已跑長度存放變數
 private   int rabbit_walk = 0; // 兔子已跑長度存放變數
 private   int finish = 1000; // 終點
 private volatile  boolean hasWinner = false;// 勝利者誕生 /**
  * 
  * @ClassName: Tortoise_Run
  * @Description: TODO(烏龜奔跑線程)
  * @author guotingchao
  * @date 2012-3-6 上午10:20:45
  * 
  */
 class Tortoise_Run implements Runnable {
  @Override
  public void run() {
   try {
    while (!hasWinner) {
     if (tortoise_walk % 100 == 0 && (tortoise_walk != 0||tortoise_walk>=finish)) { //烏龜每100米休息500毫秒
      System.out.println("烏龜休息中………………");
      Thread.sleep(500);
     }
     tortoise_walk++;
     System.out.println("烏龜已跑"+tortoise_walk+"米");
    }
    
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 } /**
  * 
  * @ClassName: Rabbit_Run
  * @Description: TODO(兔子奔跑線程)
  * @date 2012-3-6 上午10:25:10
  * @author guotingchao
  */
 class   Rabbit_Run implements Runnable {
  @Override
  public void run() {
   try {
    while (!hasWinner) {
     if (rabbit_walk % 20 == 0 && (rabbit_walk != 0||rabbit_walk>=finish)) { //兔子每20米休息500毫秒
      System.out.println("兔子休息中………………");
      Thread.sleep(500);
     }
     rabbit_walk=rabbit_walk+5;  //每秒跑5步
     System.out.println("兔子已跑"+rabbit_walk+"米");
    }
   
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 @Override
 public void run(){
  new Thread(new Rabbit_Run()).start();
  new Thread(new Tortoise_Run()).start();
 }
 /**
  * @Title: main
  * @Description: TODO(
  *               賽程1000米,兔子跑5米,烏龜跑1米,兔子每20米休息500毫秒,烏龜每100米休息500毫秒。誰先到終點就結束程序
  *               ,並顯示獲勝方。)
  * @param @param args
  * @param @throws Exception 設定文件
  * @author guotingchao
  * @return void 返回類型
  * @throws
  */
 public static void main(String[] args) throws Exception {
  long temp_actionTime=System.currentTimeMillis();
  System.out.println("比賽開始:"+new Date(temp_actionTime)+"毫秒");
  Test t=new Test();
  new Thread(t).start();
  while(true){
   if(t.tortoise_walk>=t.finish||t.rabbit_walk>=t.finish){
    t.hasWinner=true;
    break;
   }
  }
  String winnnerName=t.tortoise_walk>t.rabbit_walk?"烏龜":"兔子";
  long temp_lastTime=System.currentTimeMillis();
  System.out.println(winnnerName+"勝利");
  System.out.println("比賽結束:"+new Date(temp_lastTime)+"毫秒");
  System.out.println("所耗時間:"+(temp_lastTime-temp_actionTime)+"毫秒");
     System.out.println("兔子="+t.rabbit_walk+" 烏龜="+t.tortoise_walk);
 }
}
//不知道兔子和烏龜的步長時間是否按每秒。 這里程序只考慮依次遞增頻率
⑶ JAVA的程序設計,設計一個龜兔賽跑的線程類模擬參與賽跑。
感覺挺有趣的,試著寫了個~
	public static void main(String[] arg) {
		new wugui().run();
		new tuzi().run();
	}
	static class wugui {
		final int su = 4;// 烏龜的速度是每秒4米
		public static boolean hasEnd = false;// 是否已經跑到終點
		public void run() {
			new Thread() {
				public void run() {
					int distance = 0;
					while (distance < 100) {
						try {
							Thread.sleep(1000);
							distance += su;
							System.out.println("小烏龜跑了" + distance + "米");
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					hasEnd = true;
					if (tuzi.hasEnd) {
						System.out.println("嗚嗚,差一點點就贏了~");
					} else {
						System.out.println("勝利是屬於有準備的人的,你的自大害了你!-------烏龜贏了");
					}
				}
			}.start();
		}
	}
	static class tuzi {
		final int su = 5;// 兔子的速度是每秒5米
		public static boolean hasEnd = false;// 是否已經跑到終點
		public void run() {
			new Thread() {
				@Override
				public void run() {
					int distance = 0;// 跑了多少米
					boolean hasXiuXi = false;// 是否休息過
					while (distance < 100) {
						try {
							Thread.sleep(1000);
							distance += su;
							System.out.println("小兔子跑了" + distance + "米");
							if (distance > 50 && !hasXiuXi) {
								System.out.println("小兔子累了,決定休息一會兒~");
								Thread.sleep((long) (10000 * Math.random()));
								System.out.println("小兔子休息夠了,又開始跑了,決一勝負吧!");
								hasXiuXi = true;
							}
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					hasEnd = true;
					if (wugui.hasEnd) {
						System.out.println("嗚嗚,早知道就不休息了~");
					} else {
						System.out.println("哇哈哈,你個戰5渣也想贏我~~做夢去吧!!-------兔子贏了");
					}
				}
			}.start();
		}
	}