페이지

2201번: 이친수 찾기

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


#include<stdio.h>
char ans[100];
long long int data[100], n, cnt, sum[100], p;
int main()
{
    int i, tmp;
    scanf("%lld", &n);
    data[1] = sum[1] = 1;
    data[2] = 1;
    sum[2] = 2;
    if (n != 1 && n != 2)
    {
        for (i = 3; ; i++)
        {
            data[i] = data[i - 1] + data[i - 2];
            sum[i] = sum[i - 1] + data[i];
            if (sum[i] >= n)
            {
                tmp = p = i;
                break;
            }
        }
        while (1)
        {
            ans[cnt++] = '1';
            ans[cnt++] = '0';
            n--;
            n -= sum[p - 1];
            p -= 2;
            for (i = p - 1; i >= 1; i--)
            {
                if (sum[i]<n)
                {
                    p = i + 1;
                    break;
                }
                ans[cnt++] = '0';
            }
            if (n == 2)
            {
                ans[cnt++] = '1';
                ans[cnt++] = '0';
                break;
            }
            else if (n == 1)
            {
                if (cnt + 2 == tmp)
                {
                    ans[cnt++] = '0';
                }
                ans[cnt++] = '1';
                break;
            }
            else if (n == 0)
            {
                if (cnt + 2 == tmp)
                {
                    ans[cnt++] = '0';
                }
                ans[cnt++] = '0';
                break;
            }
        }
    }
    else if (n == 1)
    {
        ans[cnt++] = '1';
    }
    else
    {
        ans[cnt++] = '1';
        ans[cnt++] = '0';
    }
    printf("%s", ans);
    return 0;
}

댓글 없음 :

댓글 쓰기