字母版斐波那契序列实现问题求助
字母版斐波那契序列实现问题求助
大家好,我正在做学校布置的编程任务,需要实现一个字母版的斐波那契函数。规则如下:
- f(0) 对应输入的第一个单个字母
- f(1) 对应输入的第二个单个字母
- 对于n≥2,f(n) = f(n-1) 拼接 f(n-2)
举个例子,如果f(0)=a、f(1)=b,那么:
- f(2)=ba
- f(3)=bab
- f(4)=babba
我写了一段C代码,在n≤3的时候能正常输出预期结果,但当n超过3之后就会出现问题。一开始我以为是程序执行速度的问题,试着加了usleep函数,但也只能让程序在n稍大一点的时候正常工作,无法解决根本问题。
下面是我的代码:
#include <stdio.h> #include <unistd.h> #include <string.h> void fib(char bank[][700], char result[700], int n) { char temp[700]; for (int i = 2; i <= n; i++) { if (i > 2) { strcpy(bank[i - 1], result); } for (int k = 0; bank[i - 1][k] != 0; k++) { result[k] = bank[i - 1][k]; } strcat(result, bank[i - 2]); } } int main() { int cases = 0; scanf("%d", &cases); getchar(); for (int i = 1; i <= cases; i++) { int n = 0; char first[5] = {}; char wordBank[][700] = {{},{}}; char result[700] = "#"; scanf("%d %c %c", &n, &first[0], &first[1]); getchar(); wordBank[0][0] = first[0]; wordBank[1][0] = first[1]; if (n == 0) { printf("Case #%d: %c\n", i, first[0]); } else if (n == 1) { printf("Case #%d: %c\n", i, first[1]); } else if (n > 1) { fib(wordBank, result, n); printf("Case #%d: %s\n", i, result); } } return 0; }
测试用例的输入如下:
3 2 a b 3 a b 4 a b
预期输出是:
Case #1: ba Case #2: bab Case #3: babba
需要说明的是,题目保证f(0)和f(1)都是单个字母,不会出现多字符的输入情况。有没有大佬能帮我看看代码哪里出问题了?
备注:内容来源于stack exchange,提问作者ruwby
相关产品推荐
相关产品推荐

