如何计算斐波那契单词的第n个字符?

时间:2019-03-21 10:47:14

标签: c fibonacci

问题是要找到第一行的第n个字符(在斐波那契单词序列中),其长度大于给定的长度。

示例:

A = 1415926535  
B = 8979323846  
Find F(n) for n = 35  
The first few terms of  are:  
1415926535,  
8979323846,  
1415926535 8979323846,  
8979323846 1415926535 8979323846,  
1415926535 8979323846 8979323846 1415926535 8979323846  

第五行首先包含超过35个字符,因此答案是F(35)=第35个字符(即9)。

我尝试使用定义为的结构数组

typedef struct obj
{
    struct obj *one;
    struct obj *two;
    char len[101]; //Given maximum length 100
    char string;
} OBJ;
OBJ result[300]; //Given that n < 2^100 which means around 250 lines max. 

//Here i denotes line number.
result[1].string = 'a';
strcpy(result[1].len, len_a);
result[2].string = 'b';
strcpy(result[2].len, len_b);
int i = 3;
while (1)
{
    result[i].one = &result[i - 2];
    result[i].two = &result[i - 1];
    strcpy(result[i].len, addStrings(result[i - 1].len, result[i-2].len));
    if (compareStrings(result[i].len, char_n) >= 0)
        break;
    i++;
}  
while (1)
{
    if (solution->string == 'a')
    {
        n = strtoull(char_n, &end, 10);
        return a[n - 1];
    }
    if (solution->string == 'b')
    {
        n = strtoull(char_n, &end, 10);
        return b[n - 1];
    }
    if (compareStrings(solution->one->len, char_n) >= 0)
    { 
        solution = solution->one;
        i -= 2;
    }
    else
    {
        char_n = subStrings(char_n, solution->one->len); 
        //n = n-len(one)
        solution = solution->two;
        i -= 1;
    }
}

其中指针一个保持指向倒数第二个元素的指针,指针两个保持指向倒数第二个元素的指针,len保持字符串的长度。 len是字符串,用于处理大于2 ^ 64的数字。在我尝试过的所有情况下,都定义了要添加和减去的功能,并且可以正常工作。完整代码在这里:[第二次尝试] [4]

大约9个测试失败。我还缺少什么吗?

0 个答案:

没有答案