计算菲波拉契数列的前21项。
解:
菲波列数列的计算公式是:第一项为0,第二项为1.第三项为前两项之和。
求前21项的值。
#include<iostream.h>
#define N 21
void main(){
int f[N];
f[0]=0;
f[1]=1;
int i;
for(i=2;i<N;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<N;i++)
cout<<f[i]<<endl;
}
//和有些菲波拉数列不同,该程序用数组元素来存储每一项的值。
//程序和数学公式有一对一的关系。
//程序中不出现数据传递。
//编程难度低
请根据下面给出的有关数据归纳出带计算过程和计算条件的递推公式并编出通用计算程序。
1
2
3
1 4
1 2 5
1 2 3 1 6
1 2 3 1 4 1 2 7
1 2 3 1 4 1 2 5 1 2 3 1 8
1 2 3 1 4 1 2 5 1 2 3 1 6 1 2 3 1 4 1 2 9
解析:从上中行数据总结出以下规律:
第N行中最后一个数为N
从第4行开始,各行数字个数等于前两行数字个数之和。
从i=4,开始,除了最后一个数字 之外,其余数字为前i-2行数字的复制。
#include<iostream.h>
#define N 10
void main(){
int s[N+1]; //用来存储除本行之外前n行的项数
int x[1000];//用来存储每一项的值
int i,k,j;
s[0]=0;
s[1]=1;
s[2]=2;
for(i=3;i<=N;i++)
s[i]=s[i-1]+s[i-2];//用来存储每和行开始时前面的项数
for(i=1;i<=N;i++)
x[s[i]]=i; //用来存储关于行数的信息。每一行最后一个数字的信息
for(i=4;i<=N;i++)
{j=1;
for(k=s[i-1]+1;k<s[i];k++)
{
x[k]=x[j];//从第一个位置开始,把上面的所有复制一遍
j+=1;}}
for(i=1;i<=N;i++)
{
for(j=s[i-1]+1;j<=s[i];j++)
cout<<x[j]<<" ";
cout<<endl;
}
}
某人在年初买了一头刚生下的母牛,3年后的年初,小母牛生下了一头小母牛,假设以后每年年初,那头母牛都生下一头小母牛,而所有小母牛也会在三年后的年初生下一头小母牛。且以后每年年初都会同样生下一头小母牛。问20年后那个有多少母牛???
//令x1,x2,x3,x4分别表示第N年后刚生下的小母牛,满一年的母牛,满二年的母牛,可生小母牛的母牛。
#include<iostream.h>
#define N 21
void main(){
int x1[N];
int x2[N];
int x3[N];
int x4[N];
int i;
x1[0]=1;
x2[0]=x3[0]=x4[0]=0;
for(i=1;i<N;i++)
{
x2[i]=x1[i-1];
x3[i]=x2[i-1];
x1[i]=x4[i]=x3[i-1]+x4[i-1];
}
int s;
s=x1[N-1]+x2[N-1]+x3[N-1]+x4[N-1];
cout<<s;
}