KI的斐波那契_DFS

Description

KI十分喜欢美丽而优雅的斐波那契数列,最近他新认识了一种斐波那契字符串,定义如下

f (0) = b, f (1) = a,

f (2) = f (1) + f (0) = ab,

f (3) = f (2) + f (1) = aba,

f (4) = f (3) + f (2) = abaab,

......

KI想知道 f (n) 中的第 m 位是什么,你可以帮他解决这个问题吗?

Input

第一行有一个整数 T ,表示测试组数。

接下来的每个测试组包含两个数 n, m 。

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

Output

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

Sample Input

5
4 1
5 3
10 22
22 233
66 2333333333333

Sample Output

a
a
a
b
a
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=1000;

long long int f[N];
void init()
{
    f[0]=1;
    f[1]=1;
    for(int i=2;i<=90;i++)
    {
        f[i]=f[i-1]+f[i-2];
    }
}
void dfs(long long int n,long long int m)
{
    if(n==1)
    {
        puts("a");
        return;
    }
    if(n==2)
    {
        if(m==1)
            puts("a");
        else puts("b");
        return;
    }
    if(m>f[n-1]) dfs(n-2,m-f[n-1]);
    else dfs(n-1,m);
}

int main(){
    int t;
    scanf("%d",&t);
    init();
    while(t--){
        long long int n,m;
        scanf("%lld %lld",&n,&m);
        dfs(n,m);

    }
}
时间: 2024-10-22 18:07:39

KI的斐波那契_DFS的相关文章

CF717A Festival Organization(第一类斯特林数,斐波那契数列)

题目大意:求 $\sum\limits_{n=l}^{r}\dbinom{f_n}{k}\bmod 10^9+7$.其中 $f_n$ 是长度为 $n$ 的 $01$ 序列中,没有连续两个或超过两个 $0$ 的个数. $1\le k\le 200,1\le l\le r\le 10^{18}$. 先考虑如何求 $f_n$. 令 $g[i][j]$ 表示长度为 $i$,结尾是 $j$ 的序列个数. $$g[i][0]=g[i-1][1]$$ $$g[i][1]=g[i-1][0]+g[i-1][1]

实现斐波那契神兔

1.用循环实现不死神兔 故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契. 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔, 再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡, 问:一对刚出生的兔子,一年内繁殖成多少对兔子? 1 1 2 3 5 8 13 21 1 import java.util.Arrays; 2 3 public class Tu { 4 5 public static void main(String

用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)

费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数.斐波那契数列.费氏数列.黄金分割数列. 在数学上,费波那契数列是以递归的方法来定义: {\displaystyle F_{0}=0} {\displaystyle F_{1}=1} {\displaystyle F_{n}=F_{n-1}+F_{n-2}}(n≧2) 用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出.首几个费波那契系数是: 0, 1, 1, 2, 3

斐波纳契数之组合

斐波纳契数之组合 Time Limit: 1000 MS Memory Limit: 65535 K Total Submit: 145(66 users) Total Accepted: 83(65 users) Rating: Special Judge: No Description 斐波那契数列是这么定义的:F0 = 1, F1 = 1, F2 = F1 + F0,··· Fn = Fn-1 + Fn-2(n>=2),对于每一项,它们都是斐波那契数. 现在给出一个整数d,求一个组合使得a

NYOJ 698 A Coin Problem (斐波那契)

链接:click here 题意: 描述 One day,Jiameier is tidying up the room,and find some coins. Then she throws the coin to play.Suddenly,she thinks of a problem ,that if throw n times coin ,how many situations of no-continuous up of the coin. Hey,Let's solve the

Fibonacci斐波拉契数列----------动态规划DP

n==10 20 30 40 50 46 体验一下,感受一下,运行时间 #include <stdio.h>int fib(int n){ if (n<=1)     return 1; else            return fib(n-1)+fib(n-2); }int main( ){ int n; scanf("%d",&n); printf("%d\n" ,fib(n) );} 先 n==10 20 30 40 50 46

求斐波那契数的python语言实现---递归和迭代

迭代实现如下: def fab(n): n1 = 1 n2 = 1 if n<1: print("输入有误!") return -1 while (n-2)>0: n3 = n2+n1 n1 = n2 n2 = n3 n-=1 return n3 number = int(input("请输入要求的斐波那契数的第几个数:")) result = fab(number) print(result) 递归实现如下: def fab(n): if n==1 o

OJ_1064.计算斐波那契第n项

1064. 计算斐波那契第n项 (Standard IO) 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 输入n,编写程序输出斐波那契数列的第n项.其中斐波那契数列f(n)的定义如下: f(1)=0,f(2)=1         f(n)=f(n-1)+f(n-2)(n>=2) 输入 一行一个正整数n. 输出 输出一个数f(n). 样例输入 5 样例输出 3 数据范围限制 1<=n<=30 1 #include<cstdio> 2 #include&

《剑指Offer》题目——斐波拉契数列

题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.(n<=39) 题目分析:如果使用简单的递归,很容易造成栈溢出.采用递推的方式即可. 代码: public class Fibonacci { public static int fibonacci(int n){ int res[] = new int[2]; res[0]=1; res[1]=1; int temp = 0; if(n==0) return 0; if(n<=2) return res[