前言
这题是我在做笔试的时候,碰到的一道题目。本人觉得挺有意思,就记录下来。
题目是:斐波那契数列(0、1、1、2、3、5、8、13、21、34…),输入一个大于1的正整数,如果这个数在斐波那契数列里面,就返回它的序号,否则,则返回-1。如:输入:5 输出:6; 输入:9 输出:-1
话不多说,直接上代码
一、代码
代码如下(示例):
/* 1、先把斐波那契数列的前100个数求出来放进arr数组
* 2、当输入一个数的时候,看看这个数在不在数组里面,在的话返回序号,不在的话返回-1
*/
#include <stdio.h>
int Get_Number(int* p, int num);
int main(void) {
int arr[100] = {0, 1, 1};
int i, num;
for( i = 3; i < 100; i++) {
arr[i] = arr[i-1] + arr[i-2];
}
printf("输入:");
scanf("%d", &num);
//输入大于1的正整数
if(num < 2) {
printf("请输入一个大于1的整数:");
scanf("%d", &num);
}
printf("\n");
printf("输出:%d\n", Get_Number(arr, num));
}
//判断num是否在arr数组里面
int Get_Number(int* p, int num) {
int i = 0;
while( *(p + i) != num ) {
i++;
if( 99 == i) {
break;
}
}
/*如果到了arr[99]都还没找到有与num相等的数,则i就等于99,返回-1;
如果不等于99,则证明num存在数组里面,返回i+1 */
if( 99 == i ) {
return -1;
} else {
return i+1;
}
}
结果显示
代码思路都在注释里面
这个数在斐波那契数列里面
这个数不在斐波那契数列里面