input:
4 0
4 1
4 2
4 3
4 4
4 5
4 6
4 7
4 8
4 9
4 10
4 11
4 12
4 13
4 14
4 15
4 16
4 17
4 18
4 19
4 20
output:
1 1 1 1
2 1 1 1
3 1 1 1
3 2 1 1
2 2 1 1
1 2 1 1
1 3 1 1
2 3 1 1
3 3 1 1
3 3 2 1
2 3 2 1
1 3 2 1
1 2 2 1
2 2 2 1
3 2 2 1
3 1 2 1
2 1 2 1
1 1 2 1
1 1 3 1
2 1 3 1
3 1 3 1
3 2 3 1
2 2 3 1
1 2 3 1
1 3 3 1
2 3 3 1
3 3 3 1
3 3 3 2
2 3 3 2
1 3 3 2
1 2 3 2
2 2 3 2
3 2 3 2
3 1 3 2
2 1 3 2
1 1 3 2
1 1 2 2
2 1 2 2
3 1 2 2
3 2 2 2
2 2 2 2
1 2 2 2
1 3 2 2
2 3 2 2
3 3 2 2
3 3 1 2
2 3 1 2
1 3 1 2
1 2 1 2
2 2 1 2
3 2 1 2
3 1 1 2
2 1 1 2
1 1 1 2
1 1 1 3
2 1 1 3
3 1 1 3
3 2 1 3
2 2 1 3
1 2 1 3
1 3 1 3
2 3 1 3
3 3 1 3
3 3 2 3
2 3 2 3
1 3 2 3
1 2 2 3
2 2 2 3
3 2 2 3
3 1 2 3
2 1 2 3
1 1 2 3
1 1 3 3
2 1 3 3
3 1 3 3
3 2 3 3
2 2 3 3
1 2 3 3
1 3 3 3
2 3 3 3
3 3 3 3
3 3 3 3
2 3 3 3
1 3 3 3
1 2 3 3
2 2 3 3
3 2 3 3
3 1 3 3
2 1 3 3
1 1 3 3
1 1 2 3
2 1 2 3
3 1 2 3
3 2 2 3
2 2 2 3
1 2 2 3
1 3 2 3
2 3 2 3
3 3 2 3
3 3 1 3
你就能发现规律:第i disk
3^(i-1) ;6 个基步一轮回。 到这你应该明白了吧
//451MS
208K
#include <stdio.h>
#include <math.h>
int main ()
{
t,n,m,k,i,step,p,loc;
num[20];
("%d",&t);
--)
scanf ("%d%d",&n,&m);
m +=
1;
//因为m是从0开始的
for (i = 1; i <= n; i ++)
{
step = pow(3,(i-1));
//算出基步
loc = m/step;
p = m%step;
if (p != 0)
loc += 1;
loc %= 6;
if (loc == 0)
num[i] = 1;
else if (loc <=
3&&loc > 0)
num[i] = loc;
else if (loc ==
num[i] = 3;
else
num[i] = 2;
}
for (i = 1; i < n; i ++)