MT2045 斐波那契,但是是字符串

简介: MT2045 斐波那契,但是是字符串

现在有字符串组:

第0项a0=“IAKIOI”;

第1项a1=“WHENWILLSCORLLOFTAIWUCOMEOUT!!!”;

之后的第k项由第k−2项+第k−1项构成。

问第n项字符串的第c个字符是什么。

格式

输入格式:

两个整数n,c意义如题

输出格式:

一个字符表示答案

样例 1

输入:

5 6

输出:

I

备注

数据范围:0≤n≤80,1≤c≤第n项字符串的长度

1.暴力代码:6/10,超内存

#include <bits/stdc++.h>
using namespace std;
int n, c1;
string b1[85];
int main()
{
    cin >> n >> c1;
    string b = "IAKIOI";
    string c = "WHENWILLSCORLLOFTAIWUCOMEOUT!!!";
    char d = 'b';
    char e = 'c';
    b1[0] = "b";
    b1[1] = "c";
    for (int i = 2; i <= n; i++)
    {
        b1[i] = b1[i - 2] + b1[i - 1];
    }
    int i = 0;
    while (1)
    {
        if (b1[n][i] == 'b')
        {
            if (c1 > 6)
            {
                c1 -= 6;
            }
            else if (c1 <= 6)
            {
                cout << b[c1-1];
                break;
            }
        }
        else if (b1[n][i] == 'c')
        {
            if (c1 > 31)
            {
                c1 -= 31;
            }
            else if (c1 <= 31)
            {
                cout << c[c1-1];
                break;
            }
        }
        i++;
    }
}


2.用int存。因为每次顺序都是固定的,都是第k项(左右两边拼起来)=第k-2项(左半边)+第k-1项(右半边),所以如果c<=k-2,则在左半边,即在第k-2项中;else在右半边k-1项中。之后继续递归到a0或a1即可。

注意点:开long long ,最后别忘记写return 0;

#include <bits/stdc++.h>
using namespace std;
long long int n, c;
long long int num[85];
string a0 = "IAKIOI";
string a1 = "WHENWILLSCORLLOFTAIWUCOMEOUT!!!";
void f(long long int n, long long int c)
{ // 递归函数,找c在k-1项 or k-2项中,一直递归直到c在a0和a1中
    if (n == 0)
    {
        cout << a0[c - 1];
        return;
    }
    if (n == 1)
    {
        cout << a1[c - 1];
        return;
    }
 
    // 第k项=第k-2项+第k-1项
    if (c <= num[n - 2])
    { // c在前k-2项中
        f(n - 2, c);
    }
    else
    { // c在后k-1项中
        f(n - 1, c - num[n - 2]);
    }
}
 
int main()
{
    cin >> n >> c;
    num[0] = 6, num[1] = 31;
    for (long long int i = 2; i <= n; i++)
    {
        num[i] = num[i - 2] + num[i - 1];
    }
    f(n, c);
    return 0;
}


相关文章
|
1月前
|
人工智能 BI
MT3019 异或和的或
MT3019 异或和的或
|
8月前
|
算法 C++
剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)
剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)
|
8月前
|
C++
Qt-使用QString输出数字上标(不要再用x2或x^2表示平方啦)
Qt-使用QString输出数字上标(不要再用x2或x^2表示平方啦)
157 0
|
9月前
|
机器学习/深度学习
CF1304B Longest Palindrome(可逆转符号,数学分析,回文串)
CF1304B Longest Palindrome(可逆转符号,数学分析,回文串)
27 0
|
11月前
|
C语言
C语言一个判断素数的函数fun,在主函数中计算1000以内所有素数的平均值并输出
C语言一个判断素数的函数fun,在主函数中计算1000以内所有素数的平均值并输出
113 0
|
存储 算法 C++
【每日算法Day 89】手动实现字符串转整数(atoi)函数,你会吗?
【每日算法Day 89】手动实现字符串转整数(atoi)函数,你会吗?
|
算法 C语言
C语言基础(有关三角形面积,阶乘算法,sqrt,pow函数,海伦公式,gets,getchar,scanf的区别,字符转换,增长率计算,的分支和循环的结构程序设计)
C语言基础(有关三角形面积,阶乘算法,sqrt,pow函数,海伦公式,gets,getchar,scanf的区别,字符转换,增长率计算,的分支和循环的结构程序设计)