一、Fibonacii数列相关的性质
1、通项公式
2、 在较高的序列,两个连续的“斐波纳契数”的序列相互分割将接近黄金比例(1.618:1或1:0.618)。例如:233/144,987/610
3、 数列中任一项的平方数都等于跟它相邻的前后两项的乘积加1或减1
4、任取相邻的四个斐波那契数,中间两数之积(内积)与两边两数之积(外积)相差1
二、递推
注:体会递推的逻辑中重要的概念,递推边界和递推式
三、实例
1、求Fibonacci数列第n项<倒推>
int F(int n){
if(n==0||n==1)return 1;//递归边界
else return F(n-1)+F(n-2);//递归式
}
2、Number Sequence<顺推>
问题简述(原题点链接):
f(1)=1, f(2)=1, f(n)=(A*f(n-1)+B*f(n-2))mod7
输入A、B、n,求出f(n)的值
#include<iostream>
#include<cstdio>
using namespace std;
int f[1000];
int main()
{
int n,a,b;
while(cin>>a>>b>>n,a+b+n)//输入0 0 0即终止
{
f[0]=f[1]=1;
int i;
for( i = 2;i<1000;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i]==1&&f[i-1]==1)
break;
}
n=(n-1)%(i-1);
cout<<f[n]<<endl;
}
return 0;
}
3、The Area
点击链接见大神
问题简述(原题点链接):求面积
思路:膜拜过大神的我理清了思路((・◇・)?还没膜拜过?前面的链接别错过,那才是原汁原味)
把阴影分割成三角形P1P2P3和两个弓形;P1和P2、P1和P3再取中点P4和P5,即两个弓形里分别得到一个三角形和两个弓形;一次又一次地划分,直到三角形的边长接近0.
#include <stdio.h>
#include <math.h>
const double e=1e-3; //控制精度
double a,h,d;
double fx(double x)
{
return a*(x-h)*(x-h)+d;
}
double area(double x1,double y1,double x2,double y2,double x3,double y3)
{
double d1,d2,d3,p,s,x4,y4;
d1=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
if (d1<e) return 0; //精度有限
d2=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
d3=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); //求出3条边长
p=(d1+d2+d3)/2;
s=sqrt(p*(p-d1)*(p-d2)*(p-d3)); //海伦公式求三角形面积
x4=(x1+x2)/2; y4=fx(x4);
s+=area(x4,y4,x1,y1,x2,y2);
x4=(x1+x3)/2; y4=fx(x4);
s+=area(x4,y4,x1,y1,x3,y3); //二分法 求余下的面积
return s;
}
int main()
{
double x1,y1,x2,y2,x3,y3,s;
int n,i;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
h=x1; d=y1;
a=(y2-d)/(x2-h)/(x2-h); //求二次函数解析式
s=area(x1,y1,x2,y2,x3,y3);
printf("%.2lf\n",s);
}
}