小LK玩积木

时间限制: 1 Sec  内存限制: 128 MB

题目描述

HH最近通过黑洞APP下载了一个盗梦APP,据说能进入一个人的梦里做一些嘿嘿嘿的事情,秉着怀疑的态度HH偷偷地潜入LK的梦中,发现LK在梦里回到了自己小时候,在把玩一堆小机器人,然而那些机器人只有a、b两种类型,于是HH恶搞心理突然萌发,过去告诉小LK,这些机器人时可以拼起来的,其中b是0级机器人,a是1级机器人,然后这些机器人是可以拼起来的,拼装方式如下:

2级机器人=1级机器人+0级机器人=ab,

其中第1个关节是a,第2个关节是b

3级机器人=2级机器人+1级机器人=aba,

其中第1个关节是a,第2个关节是b,第3个关节是a

4级机器人=3级机器人+2级机器人=abaab

其中第1个关节是a,第2个关节是b,第3个关节是a,第4个关节是a,第5个关节是b

……

然后HH问小LK想知道n级机器人 中的第 m个关节是那个小机器人,如果错了,就带走所有的机器人,然而小LK暂时还没发解决这个问题,所以你可以帮小LK解决这个问题吗?

输入

本题输入为多样例。

每个测试组包含两个数 n, m 。

数据范围: T≤ 1000, 0 ≤ n ≤ 90, 1 ≤ m ≤ 100000000

输出

对于每个测试组,输出’a’或者’b’

样例输入

0 1
1 1
2 2
3 3
4 5

样例输出

b
a
b
a
b
#include <stdio.h>
long long a[100];
int Fibon(int n, long long m)
{
    if (n == 0 || n == 1)
        return n;
    else
    {
        if (m >= a[n - 1])
            Fibon(n - 2, m - a[n - 1]);
        else Fibon(n - 1, m);
    }
}
int main()
{
    int n, i;
    long long m;
    a[0] = 1; a[1] = 1;
    for (i = 2; i <= 90; i++)
    {
        a[i] = a[i - 1] + a[i - 2];
    }
    while (~scanf("%d%lld", &n, &m))
    {
        if (Fibon(n, m) == 0)
            printf("b\n");
        else printf("a\n");
    }
    return 0;
}