2017-01-23 45 views
-1

我是C++的新手,我在幾個月前開始在大學學習它。 我有作業打印斐波那契數字索引(如果是)或打印0(如果不是)。但斐波那契有點不同。 F(n) = aF(n-1) + bF(n-2)。其中a和b來自輸入。因此,我繼續輸入:
11(這些是a和b)
4(是輸入的數字的長度)
13 14 9 5(確切的數字)
。在這種情況下,這是常規斐波那契序列。因此,它具有打印:
7(FIB(7)= 13)
0(14不是一個FIB編號)
0(9不是一個FIB編號)
5(FIB(5)= 5)
獲取斐波那契數的索引

約束條件是:
A,b的數​​字 和每個數字的 計數應在範圍[0,百萬]

我沒有輸出。它真的給我打印指數,但沒有0。只有7和5.這裏是我的代碼:

#include <iostream> 
#include <vector> 
using namespace std; 
int a,b; 

int fib(int n) 
{ 

    if (n <= 1) 
     return n; 
    return a*fib(n-1) + b*fib(n-2); 
} 


int main() 
{ 
    int length; 
    vector<int> v; 
    int number; 
    while (cin >> a >> b >> length) 
    { 
     for (int i = 0; i < length; i++) 
     { 
      cin >> number; 
      v.push_back(number); 
     } 

     for (int i = 0; i < v.size(); i++) 
     { 
      for (int j = 0; j <= 30; j++) // 30 is max because 31 is beyond 1.000.000 
      { 
       if (v[i] == fib(j)) 
       { 
        cout << j << endl; 
       } 
      } 
     } 
     v.clear(); 
    } 
    return 0; 
} 

我該如何打印0呢?

+0

你應該對Fibonacci數做一些研究。第n個斐波納契數是一個封閉的公式。換句話說,你只需插入'n',它立即吐出答案。您可能可以使用它來幫助您的解決方案。 –

回答

0

一個例子將是使「發現這個號碼Fibonacci序列「功能:

int get_index(int v) 
{ 
    for (int j = 0; j <= 30; j++) // 30 is max because 31 is beyond 1.000.000 
    { 
     if (v == fib(j)) 
     { 
      return j; 
     } 
    } 
    return 0; 
} 

如果循環中沒有返回值,則在函數結束時返回0。

之後,你只需要使用它在你的主代碼,就像這樣:

 for (int i = 0; i < v.size(); i++) 
     { 
      cout << get_index(v[i]) << endl; 
     } 

下面是完整的代碼:

#include <iostream> 
#include <vector> 
using namespace std; 
int a,b; 

int fib(int n) 
{ 

    if (n <= 1) 
     return n; 
    return a*fib(n-1) + b*fib(n-2); 
} 

int get_index(int v) 
{ 
    for (int j = 0; j <= 30; j++) // 30 is max because 31 is beyond 1.000.000 
    { 
     if (v == fib(j)) 
     { 
      return j; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
    int length; 
    vector<int> v; 
    int number; 
    while (cin >> a >> b >> length) 
    { 
     for (int i = 0; i < length; i++) 
     { 
      cin >> number; 
      v.push_back(number); 
     } 

     for (int i = 0; i < v.size(); i++) 
     { 
      cout << get_index(v[i]) << endl; 
     } 
     v.clear(); 
    } 
    return 0; 
} 
1
for (int i = 0; i < v.size(); i++) 
    { 
     bool flag = true; 
     for (int j = 0; j <= 30; j++) // 30 is max because 31 is beyond 1.000.000 
     { 
      if (v[i] == fib(j)) 
      { 
       flag = false; 
       cout << j << endl; 
      } 
     } 
     if(flag) cout << "0\n"; 
} 
+0

這是最快的方法。感謝您的快速反應,它工作得很好 – user7460099

-1

您需要一種方法來指示找到匹配,然後在循環結束後,如果沒有找到匹配,然後打印出0

-1

我在環的感覺是這樣的硬編碼數30是不正確的,因爲如果A或B是80例如這不起作用?