糖和抖m在玩个游戏,规定谁输了就要请谁吃顿大餐:抖m给糖a b c三个驻, 并在a柱上放置了数量为n的圆盘,圆盘的大小从上到下依次增大,现在要做的事就是把a柱的圆盘全部移到c柱,移动的过程中保持小盘在上,大盘在下,且限定圆盘只能够移动到相邻的柱子,即a柱子上的圆盘只能够移动到b,b柱子上的圆盘只能够移动到a或者c,c同理。现在请你设计一个程序,计算所需移动的最小步数, 帮助糖赢得大餐!
糖和抖m在玩个游戏,规定谁输了就要请谁吃顿大餐:抖m给糖a b c三个驻, 并在a柱上放置了数量为n的圆盘,圆盘的大小从上到下依次增大,现在要做的事就是把a柱的圆盘全部移到c柱,移动的过程中保持小盘在上,大盘在下,且限定圆盘只能够移动到相邻的柱子,即a柱子上的圆盘只能够移动到b,b柱子上的圆盘只能够移动到a或者c,c同理。现在请你设计一个程序,计算所需移动的最小步数, 帮助糖赢得大餐!
每一行输出有一个整数n(0<=n<26), 直至文件末尾。
对于每一组数据,输出一行,输出移动的最小步数M。
1
2
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNextLine()){ int n=Integer.parseInt(in.nextLine()); int c=1,t=0; int step=0; for(int i=1;i<n;i++){ c=3*c+1; } step=2*c; if(n==1)System.out.println("2"); else System.out.println(step); } } }
import java.util.*; public class Main { //移动次数 //汉诺塔问题 public static int moveCount = 0; public static void main(String[] args){ Scanner scanner = new Scanner(System.in); //必须要加while(scanner.hasNext()),因为会输入很多数,有点小坑 while(scanner.hasNext()){ int n = scanner.nextInt(); Hanoi(n,'a','b','c'); System.out.println(moveCount); moveCount = 0; } } public static void Hanoi(int n,char a,char b,char c){ /*if(n == 1){ moveCount = 1; }*/ if(n == 0){ return; } Hanoi(n - 1,a,b,c); moveCount++; Hanoi(n - 1,c,b,a); moveCount++; Hanoi(n - 1,a,b,c); } }