페이지

1914번: 하노이 탑

https://www.acmicpc.net/problem/1914


#include<stdio.h>
int N, cnt;
char data[50];
void f(int s, int tmp, int e, int h)
{
    if (h == 1)
    {
        printf("%d %d\n", s, e);
        return;
    }
    f(s, e, tmp, h - 1);
    printf("%d %d\n", s, e);
    f(tmp, s, e, h - 1);
}
int main()
{
    int i, j, tmp;
    char ctmp;
    scanf("%d", &N);
    data[0] = '1';
    for (i = 1; i <= N; i++)
    {
        tmp = 0;
        for (j = cnt; j >= 0; j--)
        {
            tmp += (data[j] - '0') * 2;
            data[j] = tmp % 10 + '0';
            tmp /= 10;
        }
        if (tmp>0)
        {
            ctmp = tmp + '0';
            cnt++;
            for (j = cnt; j >= 1; j--)
            {
                data[j] = data[j - 1];
            }
            data[0] = ctmp;
        }
    }
    data[cnt]--;
    printf("%s\n", data);
    if (N <= 20)
    {
        f(1, 2, 3, N);
    }
}

댓글 없음 :

댓글 쓰기