【问题标题】:how can i store fibonacci sequence in a matrix我如何将斐波那契数列存储在矩阵中
【发布时间】:2021-09-04 16:18:05
【问题描述】:

好吧,我需要将斐波那契数列存储在一个 2x5 矩阵中,但我在做什么它不起作用。这是我的尝试

int main()
{
    int i,j,k;
    int mat[2][5];
    mat[0][0]=0;
    mat[0][1]=1;
    k=2;
    for (i=0; i<2; i++)
    {
        for(j=0; j<5; j++)
        {
            
            mat[i][k]=mat[i][j]+mat[i][j+1];
           
            k++;
        }
    }
    for(i=0; i<2; i++)
    {
        for(j=0; j<5; j++)
        {
            printf("%d\t",mat[i][j]);
        }
        printf("\n");
    }
    return 0;
}

【问题讨论】:

  • 如果任务是教你 2x5 存储在与 1x10 相同的 10 个连续整数中,那么你可以使这项工作变得更容易。将它们存储为 1x10,将其转换为 2x5,然后遍历 2x5 进行打印。
  • mat[i][j+1] 将超过最后一次迭代的数组限制。
  • ... 和 mat[i][k] 也将在最后的 五次 迭代中,因为初始化 k=2; 并且因为 i 可以是 1。这可能会破坏某些东西。不过,“不工作”并不是一个有用的问题描述。
  • 谢谢@JeffHolt,我设法用你的提示解决了问题

标签: c matrix fibonacci


【解决方案1】:

如何使用矩阵的行和列来计算该元素在斐波那契数列中的“位置”?

#include <stdio.h>
#define ROWS 2
#define COLS 5

int fibonacci(int position)
{
    if (position == 0)
        return 0;

    if (position == 1)
        return 1;

    return fibonacci(position - 1) + fibonacci(position - 2);
}

int main()
{
    int mat[ROWS][COLS];

    for(int row = 0; row < ROWS; row++)
    {
        for(int col = 0; col < COLS; col++)
        {
            /*
            [0,0] = 0 [0,1] = 1, [0,2] = 2, [0,3] = 3, [0,4] = 4
            [1,0] = 5 [1,1] = 6, [1,2] = 7, [1,3] = 8, [1,4] = 9
            */
            mat[row][col] = fibonacci(COLS * row  + col);

            printf("%3d, ", mat[row][col]);
        }
        printf("\n");
    }

    return 0;
}

【讨论】:

  • 请注意,此解决方案每次从一开始就计算斐波那契值。由于您的问题似乎存储在矩阵中,因此您正在寻找的解决方案的主要部分是“位置”本身,因此,这是此答案的重点。如果我的假设是错误的,请随时修改它,以避免每次都从开始计算序列的每个元素。
  • 你能解释一下为什么它没有显示三倍的数字 1 吗?比如,当 col = 0 时,它会在 0,0 位置返回 1,col = 1 也是如此,然后当 col = 2 时,它也应该返回 1 对吧?
  • @Thorsen,你是对的,我的答案被误认为是第 0 位,已修复!从一开始就应该是if (position == 0) return 0;。现在它正确显示为0, 1, 1, 2, 3, 5, [...]
【解决方案2】:

请您尝试以下方法:

#include <stdio.h>

int main()
{
    int i, j, k;
    int mat[2][5] = {{0, 1}};

    for (k = 2; k < 10; k++) {
        mat[k / 5][k % 5] = mat[(k - 1) / 5][(k - 1) % 5] + mat[(k - 2) / 5][(k - 2) % 5];
    }
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 5; j++) {
            printf("%d\t", mat[i][j]);
        }
        printf("\n");
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2020-12-07
    • 2015-04-11
    • 1970-01-01
    • 2015-06-05
    相关资源
    最近更新 更多