请帮助解决这个基本问题。我在下面收到了一个问题。
使用函数F(A,B,N)计算A和B整数的模数为1,000,000,007,如下所述,使用C ++,0 <= N <= 1000000000。
Modulus of F[A, B, 0] is equal to A%1,000,000,007
Modulus of F[A, B, 1] is equal to B%1,000,000,007
Modulus of F[A, B, N] is equal to modulus of F[A, B, N - 1] + F[A, B, N - 2]
Example, Modulus of F[3, 4, 5] is equal to 29. In detail:
Modulus of F[3, 4, 0] is equal to 3%1,000,000,007 which is 3
Modulus of F[3, 4, 1] is equal to 4%1,000,000,007 which is 4
Modulus of F[3, 4, 2] is equal to modulus of F[3, 4, 1] + F[A, B, 0] which is 3 + 4 = 7
Modulus of F[3, 4, 3] is equal to modulus of F[3, 4, 2] + F[A, B, 1] which is 7 + 4 = 11
Modulus of F[3, 4, 4] is equal to modulus of F[3, 4, 3] + F[A, B, 2] which is 11 + 7 = 18
Modulus of F[3, 4, 5] is equal to modulus of F[3, 4, 4] + F[A, B, 3] which is 18 + 11 = 29
我使用的是Xcode和Mac OS X,这是我的代码。
#include <iostream>
#include <vector>
int solution(int A, int B, int N)
{
std::vector<int> remainderVector;
if (N < 0 || N > 1000000000)
{
std::cout << "N is out of range." << std::endl;
}
if (N == 0)
{
remainderVector[N] = A%1000000007;
}
if (N == 1)
{
remainderVector[N] = B%1000000007;
}
if (N > 1 && N <= 1000000000)
{
remainderVector[0] = A%1000000007;
remainderVector[1] = B%1000000007;
for (int i = 2; i <= N; i++)
{
remainderVector[i] = remainderVector[i - 1] + remainderVector[i - 2];
}
}
std::cout << "Remainder is: " << remainderVector[N] << std::endl;
return 0;
}
int main()
{
std::cout << "Input A interger: " << std::endl;
int x;
std::cin >> x;
std::cout << "Input B interger: " << std::endl;
int y;
std::cin >> y;
std::cout << "Input Z interger: " << std::endl;
int z;
std::cin >> z;
int solution(int x, int y, int z);
std::cout << "This is a debug message." << std::endl;
return 0;
}
当我运行此代码时,它只显示消息:这是一条调试消息。当我输入如上所述的3,4,5的例子时,为什么它没有打印出29号。
非常感谢你的帮助。
答案 0 :(得分:0)
您的remainderVector
最初为空,因此您无法分配其中的任意元素(因为它们不存在)。变化:
std::vector<int> remainderVector;
到
std::vector<int> remainderVector(N + 1);
另请注意,其余代码中的逻辑看起来有些混乱,并且有一些冗余。固定/简化版本将是:
remainderVector[0] = A%1000000007; // set element 0
if (N > 0) // set element 1
{
remainderVector[1] = B%1000000007;
}
for (int i = 2; i <= N; i++) // set elements 2..N
{
remainderVector[i] = remainderVector[i - 1] + remainderVector[i - 2];
}