【问题标题】:How do i select a number in a matrix in c?如何在c中的矩阵中选择一个数字?
【发布时间】:2015-05-17 02:35:13
【问题描述】:

所以我制作了一个由 (NxN) 组成的矩阵。并且矩阵的数字通过用户输入输入到多维数组中。我正在使用指针和malloc。所以我必须在数组中选择一个数字,然后得到相邻数字的总和,这个数字是通过说出位置来选择的。所以只是说矩阵中的第三个数字。我对如何选择一个数字有点困惑,我有一个总体的想法是递增到正确的位置?这是对的吗?然后这会使获得相邻数字的总和变得更难或更容易吗?

对如何使用多维数组执行此操作有点困惑,我是否将其转回单个数组?
这就是我创建矩阵的方式:

for(i = 0; i< matrixSize; i++)
{ 
    for(j=0; j < matrixSize; j++)
    {
        scanf("%d", &matrixValues[i][j]); 
    }   
}   

【问题讨论】:

  • 矩阵中的第三个数字?那是什么意思?那将是哪一列和哪一行?你为什么不发布你的代码?
  • 如果你在一个普通数组中有你需要的东西,你能解释一下它是如何工作的吗?
  • 用户说他们想找到矩阵中第 5 个数字的最大和,所以说它 25。然后你找到相邻的数字,找到包括 25 的最大和。

标签: c arrays matrix multidimensional-array


【解决方案1】:

如果您指的是矩阵中的数字,如下所示(例如 matrixSize == 4):

  0  1  2  3
  4  5  6  7
  8  9 10 11
 12 13 14 15

你可以从number计算索引

 matrixValues[number/matrixSize][number%matrixSize]

编辑:

如果您的 2D 数组定义为

 int matrixValues[matrixSize][matrixSize];

在内存中顺序分配的所有元素,即元素matrixValues[1][0]正好在matrixValues[0][matrixSize-1]之后,因此您可以使用number作为元素matrixValues[0][0]的地址偏移,例如:

 *(((int*)matrixValues) + number)

你的例子可以是

    int matrixValues[matrixSize][matrixSize];
    // input as 2D array
    int i, j;
    for(i = 0; i< matrixSize; i++)
    { 
        for(j=0; j < matrixSize; j++)
        {
            scanf("%d", &matrixValues[i][j]); 
        }   
    }   
    // using address of matrix as begining of array
    int* fakeArray = (int*)matrixValues;
    // output as 1D arrray
    int n;
    for(n = 0; n < matrixSize * matrixSize ; n++)
    {
        printf("%d ", fakeArray[n]);
    }

【讨论】:

  • 感谢您的帮助。我不希望将 n 与输入数字进行比较吗?例如,如果我想要您的示例中的 5 个。我会输入 5。然后它会循环到第 5 个数字?对不起,我可能不明白。
  • 为了更好地理解你可以解释你的程序应该如何工作。什么是输入?如果您想要前 5 个元素,请询问 N 和其他 scanf("%d",&amp;N);(例如 N 将是 5)并循环 for (n = 0; n &lt; N; n++) 输出
  • 3 2 21 22 23 20 00 11 17 06 15 这将是输入,例如,3 将是大小,所以 (3x3),2 将是数字的选择,所以 22 在这个实例。然后你计算出相邻数字的总和。以 22+21 为例。如果这清除了我想要做什么?
  • 第一个数字 (3) 是大小,第二个 (2) 是从头开始的数字,应该是结果的总和。输入来自键盘?
  • 我认为你可以使用简单的数组(不是矩阵)。为什么要用二维数组?
猜你喜欢
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多