首页 > 试题广场 >

大吉大利,今晚吃鸡

[编程题]大吉大利,今晚吃鸡
  • 热度指数:4528 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

糖和抖m在玩个游戏,规定谁输了就要请谁吃顿大餐:抖m给糖a b c三个驻, 并在a柱上放置了数量为n的圆盘,圆盘的大小从上到下依次增大,现在要做的事就是把a柱的圆盘全部移到c柱,移动的过程中保持小盘在上,大盘在下,且限定圆盘只能够移动到相邻的柱子,即a柱子上的圆盘只能够移动到b,b柱子上的圆盘只能够移动到a或者c,c同理。现在请你设计一个程序,计算所需移动的最小步数, 帮助糖赢得大餐!


输入描述:
每一行输出有一个整数n(0<=n<26), 直至文件末尾。


输出描述:
对于每一组数据,输出一行,输出移动的最小步数M。
示例1

输入

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);
        }
    }
}

发表于 2022-08-02 16:15:51 回复(0)
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);
        }
}

发表于 2022-07-06 15:17:38 回复(0)