2017年6月19日 星期一

第八章 河內塔計次版

題目:顯示盤子的移動狀況,並且在完成移動後輸出移動次數

import java.io.*;
class HanoiTowerGame{
static int count1=0;//累積移動次數用

void go(int discs){
hanoiTower('A','C','B',discs);
}

//實際搬動盤子
void moveDisc(char source, char target, int disc){
System.out.println("將"+disc+"號碟子從柱子"+
source+ "搬到"+target);
count1++;
}

/**
a: 來源柱子
b: 目的地
c: 空的柱子
discs: 碟子數量
*/

void hanoiTower(char a,char c, char b ,int discs){
if(discs==1){
moveDisc(a, c, discs);
return;
}

//先將最大碟子以外的碟子搬到B
hanoiTower(a, b, c, discs-1);

//把最大的碟子搬到C
moveDisc(a,c,discs);

//將搬到B的碟子搬到C
hanoiTower(b, c, a, discs-1);
}
}
public class Hanoi {

public static void main (String [] argv)throws IOException{
HanoiTowerGame game =new HanoiTowerGame();

BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));

System.out.println("請輸入碟子數量");
int discs= java.lang.Integer.parseInt(br.readLine());

game.go(discs);

System.out.print(HanoiTowerGame.count1);

}
}

沒有留言:

張貼留言