作者hi08060204 (Or2)
看板NTUBIME100HW
标题Re: [试题]C++答案
时间Wed Nov 21 20:58:39 2007
: 第七题:(10分)
: 请计算并列印出费朋纳西序列(Fibonacci sequence)之前二十项,
: 请注意列印之每一行共有五个数(合计四行)。
: 提示:费朋纳西序列为 1, 1, 2, 3, 5, 8, 13, 21, 34,.....
: ───────────────────────────────────
: 答案栏:(空间不够时请写於背面)
网站公布正解是使用递回来解
但递回是三小朋友我不知道
我提供我的土法炼钢做法, 大家笑笑就好
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int value1=0;
int value2=1;
int temp=0;
for(int i=1;i<=20;i++)
{
cout << value2<<"\t";
temp=value2;
value2=value1+value2;
value1=temp;
if(i%5==0)
{
cout<<endl;
}
}
system("PAUSE");
return 0;
}
可能有人看不懂, 我解释一下
费式数列是後面一项等於前面两项之和这是废话我不赘述
所以我用两个变数value1, value2来纪录要相加的两项
然後把原本的value2值要存进value1, value1+value2存进value2
以做於下次要呈现後面的项数, 要拿来加的新value1 value2
value1=value2;
value2=value1+value2;
但是发生了错误, 我先做存进value1的动作,
然後下面要存进value2的两项之和的value1却已不是原本的, 是先被我更新过的
所以我制造变数temp 这个拿来当做暂存档
让
temp=value2;
value2=value1+value2;
也就是说 相加的那两项还是原本的
之後再
value1=temp;
再把暂存档存进我要存进的value1里
就是这样
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.241.27
1F:推 chaochienyao:又有阶层的FU了 11/21 22:28