小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;
}