在C ++中使用函数

时间:2016-06-30 09:47:58

标签: c++

请帮助解决这个基本问题。我在下面收到了一个问题。

使用函数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号。

非常感谢你的帮助。

1 个答案:

答案 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];
}