菲波拉契数列为1,1,2,3,5,8,13,21,…,其元素产生的规则是前两个数为1,从第三个数开始每个数等于它前面两个数之和。已知任意一个正整数可以表示为若干个互不相同的菲波拉契数之和。例如:36=21+13+2。
下面的程序是由键盘输入一个正整数n,输出组成n的互不相同的菲波拉契数。算法说明:(1)寻找小于等于n的最大菲波拉契数a,并以a作为组成n的一个数(2)若n≠a,则以n-a作为n的新值,重复步骤(1)。若a=n,则结束。
#include<iostream>tinclude<cstdio>using namespace std;
int n;
bool first;
int find (int n)
int a,b,c;
a=l;b=l;
do
C=a+b;
(_①);
}while(b<n);
if(2)
return bi
else
( 3_)
)
void p(int n)
int a;
a=find(n);
if(first)
printf("%4d",a);
first false
}else
if(a<n)
int main()
cin>>n;
first=true;
printf("g5d=",n);
P(n);
cout<<endl;
return 0;
1处应填
a=c:b=a
a=b;b=c
a==b;b==c
a==c;b==a
2处应填
b==n
b<n
a==n
a<n
3处应填
return c
return b
return a+b
return a
4处应填
printf("%4d" ,a)
printf( " +% 4d" ,a)
printf( " % 4d" ,b)
printf( " +%4d" ,b)
5处应填
p(a)
p(b)
p(n-a)
p(n-b)
发表评论