我正在为大学提供的一个案例编程。这是关于制作斐波那契函数的,但对于字母。例如,如果f(0)
-> a
,f(1)
-> b
,那么f(2)
-> ba
,等等。我在完成一半时发现了一个我无法解决的问题。
#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
型
第1行的3
是测试用例的数量,
第2行上的2
是f(n)
的结果,f(0)
和f(1)
中的线2上的a
和b
,
输出将是:
Case #1: ba
Case #2: bab
Case #3: babba
型
当我尝试输入n
超过3
时,问题就出现了。我尝试使用usleep
函数来减慢这个过程,因为我认为这就是问题的根源。usleep
只能帮助我,直到更多的n范围。f(0)
和f(1)
保证为1个字母,因此对于f(0)
或f(1)
,它不能是'ab',或者对于f(0)
和f(1)
,它不能是任何其他超过1个字母的组合。
2条答案
按热度按时间xytpbqjk1#
char wordBank[][700] = {{},{}};
将wordBank定义为只有两个数组的数组,每个数组700个字符(所有1400个字符都是'\0'
)。尝试定义更大的数组
字符串
请参阅https://ideone.com/W9guSZ
23c0lvtd2#
对于初学者来说,这个标题:
字符串
是多余的,因为头文件中的两个声明都没有在程序中使用。
不带参数的函数
main
应声明为:型
使用函数
getchar
,例如这一行:型
也是多余的。您应该删除
getchar
的调用。不清楚为什么在程序中使用幻数
700
。在函数中,数组
temp
:型
没有使用。
声明数组
wordBank
:型
只有两个元素。但在函数中,由于循环,可以访问数组外部的内存:
型
当
n
大于2
时,会导致未定义的行为。根据赋值,函数应该构建一个新的字符串。
它应该声明为:
型
使用任意两个初始字符。函数的调用者应该将字符传递给函数。
我将按照下面的演示程序中所示的方式定义函数:
型
程序输出为:
型