這是我應該做的問題的陳述:
- 撰寫一個程式來列印以下系列直到用戶輸入的術語。0, 1, 1, 2, 3, 5, 8, 13, .... 其中 0 是第 1 項,13 是第 8 項。提示:0, 1 0 1 = 1 0, 1, 1 1 1 = 2 0, 1, 1, 2
這是我的代碼:
int prev_i = 0;
cout << "Enter a number: " << endl;
cin >> number;
for (i = 0; i <= number; i )
{
cout << prev_i i << " ,";
prev_i = i;
}
不過,我確實明白我的代碼有什么問題。它將 i 添加到 prev_i 然后將 prev_i 設定為 i。因此,在下一次迭代中,當 i 為 1 時,即 i prev_i = 1 所以現在 prev_i = 1,這里的問題是 i 現在為 2 所以 i prev_i = 3。而且我似乎真的不知道如何獲得 1 3 作為這里的輸出等等。
哦,不要擔心我沒有正確宣告。我只是沒有復制那部分。
請幫忙!
uj5u.com熱心網友回復:
您正在嘗試生成一個斐波那契數列(以兩個項 (0,1) 開始,每個后續項都是前兩項的加法)。因此,i不應作為計算的一部分;它僅用于控制回圈。
序列中前十個數字的簡單生成就是這樣:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=0, b=1;
for (int i=0; i<10; i)
{
printf("%d ", a);
int c = a b;
a = b;
b = c;
}
fputc('\n', stdout);
return EXIT_SUCCESS;
}
而已。上面的代碼將生成以下內容:
0 1 1 2 3 5 8 13 21 34
我將應用上述邏輯來生成您的最終要求,但這就是迭代生成序列的方式。
PS:為寫C代碼提前道歉。我完全隔開語言標簽,但演算法是相同的。
uj5u.com熱心網友回復:
顯示的系列是斐波那契數列。查看它的定義并找出:您需要哪些數字來計算當前數字?在您當前的代碼中,您只有一個以前的號碼可用。如果這還不夠,您還需要什么?
uj5u.com熱心網友回復:
這是我的三美分。:)
#include <iostream>
#include <utility>
int main()
{
while (true)
{
std::cout << "Enter a non-negative number (0 - exit): ";
unsigned int n;
if (!( std::cin >> n ) || ( n == 0 )) break;
unsigned long long int first = 0;
unsigned long long int second = 1;
std::cout << '\n';
for (unsigned int i = 0; i < n; i )
{
if (i != 0) std::cout << ' ';
std::cout << first;
second = std::exchange( first, second );
}
std::cout << "\n\n";
}
}
程式輸出可能看起來像
Enter a non-negative number (0 - exit): 1
0
Enter a non-negative number (0 - exit): 2
0 1
Enter a non-negative number (0 - exit): 3
0 1 1
Enter a non-negative number (0 - exit): 4
0 1 1 2
Enter a non-negative number (0 - exit): 5
0 1 1 2 3
Enter a non-negative number (0 - exit): 6
0 1 1 2 3 5
Enter a non-negative number (0 - exit): 7
0 1 1 2 3 5 8
Enter a non-negative number (0 - exit): 8
0 1 1 2 3 5 8 13
Enter a non-negative number (0 - exit): 0
斐波那契數列增長非常快。所以一般來說你需要檢查for回圈中是否會發生溢位。
uj5u.com熱心網友回復:
您的代碼正在列印當前元素和前一個元素的總和。但上述問題要求斐波那契數,其定義為:
Fib[i] = Fib[i - 1] Fib[i - 2]; Fib[0] = 0, Fib[1] = 1
現在可以通過遞回或一維DP來解決。
但是通過了解上述關系可以構造一個簡單的解決方案。我們可以定義當前的斐波那契數為 just previous 和 previous of just previous 之和。
代碼是:
int prev1 = 0; // Fib[0]
int prev2 = 1; // Fib[1]
int curr;
cout << prev1 << ' ' << prev2 << ' ';
for (int i = 2; i <= n; i )
{
// Fib[i] = Fib[i - 1] Fib[i - 2];
curr = prev2 prev1;
cout << curr << ' ';
prev1 = prev2;
prev2 = curr;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383693.html
