我是C ++的新手,几个月前我开始在大学里学习它。
我有一个功课来打印斐波那契数字的索引(如果是)或打印0(如果它不是)。但斐波那契有点不同。
F(n) = aF(n-1) + bF(n-2)
。其中a和b来自输入。所以我继续输入:
1 1(那些是a和b)
4(是输入数字的长度)
13 14 9 5(确切数字)
。在这种情况下,这是常规的斐波那契序列。所以它必须打印:
7(fib(7)= 13)
0(14不是fib数)
0(9不是fib数)
5(fib(5)= 5)
限制因素是:
0< a,b< 100个
数量的计数< 10000
每个数字应在[0,1000000]范围内
我做了输出。它确实打印了索引,但没有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 :(得分: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";
}
答案 1 :(得分: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;
}
答案 2 :(得分:-1)
您需要一种方法来指示找到匹配项,然后在循环结束后,如果未找到匹配项,则打印出0。
答案 3 :(得分:-1)
我觉得循环中这个硬编码的数字30是不正确的,因为如果A或B是80,例如这不起作用?