问题是要找到第一行的第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个测试失败。我还缺少什么吗?