C++编程有一个数列,1,3,4,7,11….求该数列的前20项

 我来答
luanqibazao227
2011-06-27 · TA获得超过1.6万个赞
知道大有可为答主
回答量:6109
采纳率:57%
帮助的人:3480万
展开全部
你好!

参考:

我给你讲一下思路:
在Fibonacci数列中,F[0]=0,F[1]=1,F[n]=F[n-1]+F[n-2](n>=2)。举例来说,Fibonacci数列的前十个数是
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
我们可以用利用矩阵乘法来计算Fibonacci的第n项 :
|F[n+1] F[n] | = |1 1|.|1 1|.|1 1|...共n个
|F[n] F[n-1] | |1 0| |1 0| |1 0|
用这个方法就可以避免递归了。
我以前写了一个程序,因为为了避免高精度的麻烦,就直接取的是斐波那契数列的后四位。你看看,把它改成高精度就可以了。
#include<iostream>
//#include<cmath>
#include<memory>
using namespace std;
int i,c[10001];
int a[2][2]={{1,1},{1,0}};
int b[2][2];

void trial(int n)
{
if(n==1) return;
else{
if(n%2==1)
{
c[i]=1;i++;trial(n-1);
}
if(n%2==0)
{
c[i]=2;i++;trial(n/2);
}
}
}
void fib(int n)
{
int i,j;
memset(c,0,sizeof(c));
trial(n);
for(i=10000;i>=0;i--)
{
if(c[i]!=0)break;
}
for(j=i;j>=0;j--)
{
if(c[j]==1)
{
b[0][1]=a[0][0]%10000;
b[0][0]=(a[0][0]+a[0][1])%10000;
b[1][1]=a[0][1]%10000;
a[0][1]=b[0][1];
a[0][0]=b[0][0];
a[1][1]=b[1][1];
}
if(c[j]==2)
{
b[0][0]=(a[0][0]*a[0][0]+a[0][1]*a[0][1])%10000;
b[0][1]=(a[0][0]*a[0][1]+a[0][1]*a[1][1])%10000;
b[1][1]=(a[1][1]*a[1][1]+a[0][1]*a[0][1])%10000;
a[0][0]=b[0][0];
a[0][1]=b[0][1];
a[1][1]=b[1][1];
}
}
}
int main()
{
int N;
cin>>N;
if(N==0){cout<<"0";return 0;}
fib(N);
cout<<a[0][1];
return 0;
}
更多追问追答
追问
这个不是斐波那契,它的规则是每项等于前两项之和。。。。
追答
晕啊,那你要输入几项啊……

你说的不太准确……
百度网友abfd957
2011-06-27
知道答主
回答量:68
采纳率:0%
帮助的人:0
展开全部
void main ()
{
int i,a[20];
a[0]=1;
a[1]=3;
for(i=2;i<20;i++) a[i]=a[i-1]+a[i-2];
for(i=0;i<20;i++) printf("%d",a[i]);
}
我这电脑没法编译,大体就是这意思,不知道有没有错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
咸者拾间
2020-07-16
知道答主
回答量:5
采纳率:0%
帮助的人:2897
展开全部
看了下别人的觉得我的容易懂些,楼主确实描述少了点第一反应斐波那契
#include<bits/stdc++.h>
using namespace std;
int a=1,b=3,c;
int main(){
cout<<a<<' '<<b<<' ';
for (int i=3;i<=20;i++){
c=a+b;a=b;b=c;cout<<c<<' ';
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liang890817
2011-06-27
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
#include<iostream>
using namespace std;
int main()
{
int i,sum=1,a=1;
for(i=1;i<20;i++)
{
a=a+2;
sum+=a;
}
cout<<"a="<<a<<endl;
cout<<"sum="<<sum<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
i金你奶奶家
2011-06-27 · TA获得超过163个赞
知道答主
回答量:128
采纳率:0%
帮助的人:73.3万
展开全部
#include"stdio.h"

void main()
{
int i,a[100];
printf("%d %d ",a[0]=1,a[1]=3);
for(i=2;i<20;printf("%d ",a[i]),i++)
a[i]=a[i-1]+a[i-2];

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式