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