因此,对于一项分配任务,我被要求创建一个函数,该函数将生成斐波那契数列,然后用户将提供一个随机数列。然后,我的函数必须检查用户输入的数组是否包含斐波那契数字,然后该函数将输出true,否则将输出false。我已经能够创建Fib数字数组,并对照用户输入的数组对其进行检查,但是由于我的Fib数组的最大大小为100,因此它受到限制。
bool hasFibNum (int arr[], int size){
int fibarray[100];
fibarray[0] = 0;
fibarray[1] = 1;
bool result = false;
for (int i = 2; i < 100; i++)
{
fibarray[i] = fibarray[i-1] + fibarray[i-2];
}
for (int i = 0; i < size; i++)
{
for(int j = 0; j < 100; j++){
if (fibarray[j] == arr[i])
result = true;
}
}
return result;
}
因此,基本上,我该如何做到这一点,这样我就不必使用int fibarray [100]而是可以生成到特定点的fib编号。该点是用户数组中的最大数目。
因此,例如,如果用户输入数组{4,2,1,8,21},我需要生成最多为21 {1,1,2,3,5,8,13,21}的fibarray。如果用户输入数组{1,4,10},则需要使用{1,1,2,3,5,8,13}生成一个fibarray
编程的新手,所以将不胜感激!对不起,如果我的代码很糟糕。
我可能仍然不理解您的问题,但是如果我理解了,那么我将实现您想要的目标:
bool hasFibNum (int arr[], int size){
if (size == 0) return false;
int maxValue = arr[0];
for (int i = 1; i < size; i++)
{
if (arr[i] > maxValue) maxValue = arr[i];
}
int first = 0;
int second = 1;
while (second < maxValue)
{
for (int i = 0; i < size; i++)
{
if (arr[i] == first) return true;
if (arr[i] == second) return true;
}
first = first + second;
second = second + first;
}
return false;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句