Fibonacci数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为
F(n)=1 ...........(n=1或n=2)
F(n)=F(n-1)+F(n-2).....(n>2)
现要你来求第n个斐波纳奇数。(第1个、第二个都为1)-
输入
-
第一行是一个整数m(m<5)表示共有m组测试数据
每次测试数据只有一行,且只有一个整形数n(n<20)
输出
- 对每组输入n,输出第n个Fibonacci数 样例输入
-
3 1 3 5
样例输出
-
1 2 5
-
第一行是一个整数m(m<5)表示共有m组测试数据
02.
#include <stdio.h>
03.
04.
int
main ()
05.
{
06.
int
m, a, b, c, n ;
07.
scanf
(
"%d"
, &m);
08.
while
(m--)
09.
{
10.
scanf
(
"%d"
, &n);
11.
if
(n <= 2)
12.
printf
(
"1\n"
);
13.
if
(n > 2)
14.
{
15.
a = 1;
16.
b = 1; //注意定义a,b的位置。
17.
n = n - 2;
18.
while
(n--)
19.
{
20.
c = b;
21.
b = b + a;
22.
a = c; //这三步为求和。为一个基础的算法。
23.
}
24.
printf
(
"%d\n"
, b);
25.
}
26.
}
27.
return
0;
28.
}
第一次尝试
没有思路,一点也没有,这都是什么什么啊。一点点的分析才找到路
第一次错误
未定义a = 1, b = 2.导致结果不对
第二次错误
定义a = 1, b = 2 的位置错误。导致每一次的第一个即n = 3错误,后思索调试
优秀代码
01.
02.
#include<stdio.h>
03.
int
main()
04.
{
05.
int
i,m,n,a[30]={1,1};
06.
for
(i=2;i<20;i++)
07.
{
08.
a[i]=a[i-1]+a[i-2];
09.
}
10.
scanf
(
"%d"
,&m);
11.
while
(m--)
12.
{
13.
scanf
(
"%d"
,&n);
14.
printf
(
"%d\n"
,a[n-1]);
15.
}
16.
return
0;
17.
}
数组是一个弱项,一直没有意识使用,以后注意下。对于一个有规律的运算,可以用数组。数组顾名思义
1.
2.
#include<stdio.h>
3.
main()
{
int
m,n,i,s1,s2;
scanf
(
"%d"
,&m);
while
(m--)
{
scanf
(
"%d"
,&n);
for
(i=3,s1=s2=1;i<=n;i++)
{s1=s1+s2;s2=s1-s2;}
printf
(
"%d\n"
,s1);
}
}