在数学上,斐波纳契数列以如下被以递归的方法定义:
F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
这个数列有着一个非常重要的美学特性:当n趋向于无穷大时,前一项与后一项的比值越到后面越来越逼近黄金分割率即f(n)/f(n-1)→1.618…
给定一个正整数N(N>1),输出其位于斐波那契数列中的第几项。如果不存在于数列则输出-1。在此我们规定数列的第一项是F(1)=1,第二项F(2)=1,……。
注:此题建议大家使用函数来进行模块化编程,例如:
void generate() //产生斐波那契数列
{
}
bool judge(int x) //判断一个数x是否在数列中
{
}
int main() //主函数
{
return 0;
}
输入格式:
一行,正整数N,(1<N<=1000000)
输出格式:
N位于第几项,如果不存在于数列中,输出-1
输入样例:
样例输入1:
2
样例输入2:
8
输出样例:
样例输出1:
3
样例输出2:
6
# include<stdio.h>
void generate(int ch[]);
int judge(int N,int ch[]);
int main()
{
int N,ch[101];
scanf("%d",&N);
if(N==1||N==2)
{
printf("1 2");
}
else
{
generate(ch);
printf("%d",judge(N,ch));
}
return 0;
}
void generate(int ch[])
{
int m,n,i,j;
ch[1]=1;ch[2]=1;
for(m=3;m<100;m++)
{
ch[m]=ch[m-1]+ch[m-2];
}
}
int judge(int N,int ch[])
{
int m,flag=-1;
for(m=0;m<100;m++)
{
if(ch[m]==N)
{
flag=m;
}
}
return flag;
}