【暴力打表找规律】Day 10 提高组模拟C组 T3 汉诺塔

题目大意

在原来汉诺塔的基础上,一柱不能直接移到三柱,问 n 柱, m 次挪动后,所以盘子的位置

解题思路

暴力打表找规律,你就可以发现它是酱紫的

盘子标号 m = 1 m = 2 m = 3 m = 4 m = 5 m = 6 m = 7 m = 8 m = 9 m = 10 m = 11 m = 12
n = 1 1 2 3 3 2 1 1 2 3 3 2 1
n = 2 1 1 1 2 2 2 3 3 3 3 3 3
n = 3 1 1 1 1 1 1 1 1 1 2 2 2

所以说,他就是123321123321,只不过每次长度不一样罢了(逃

代码

#include<cstdio>
#include<cmath>
using namespace std;int t,n,san[20];
long long m;
int main()
{
    scanf("%d",&t);
    san[0]=1;san[1]=3;
    for(int i=2;i<=19;i++) san[i]=san[~-i]*3;
    while(t--)
    {
        scanf("%d%lld",&n,&m);
        for(int i=1,k;i<=n;i++)
        {
            k=m/san[~-i];//计算每次的长度
            if(k%6==0||k%6==5)printf("1");
            if(k%6==1||k%6==4)printf("2");
            if(k%6==2||k%6==3)printf("3");//输出
            if(i!=n) putchar(32);//空格
        }
        if(t)putchar(10);//换行
    }
}

猜你喜欢

转载自blog.csdn.net/xuxiayang/article/details/81055831