现在的位置: 首页 > 综合 > 正文

noj 1849 汉诺塔

2018年03月17日 ⁄ 综合 ⁄ 共 1142字 ⁄ 字号 评论关闭
思路:这道题应该算是模拟题,找规律 举个例 有4个板

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 ()
{
    int
t,n,m,k,i,step,p,loc;
    int
num[20];
    scanf
("%d",&t);
    while (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 ==  4)
               
num[i] = 3;
           
else
               
num[i] = 2;
       
}
       
for (i = 1; i < n; i ++)
       

抱歉!评论已关闭.