【问题标题】:CodeSignal problem. I want to complete the code代码信号问题。我要完成代码
【发布时间】:2020-12-25 10:18:55
【问题描述】:

我有以下问题。函数printMatrix

例如接收一个矩阵:

matrix:
[[0,1,1,2], 
 [0,5,0,0], 
 [2,0,3,3]]

我必须使用的代码如下:

// Definition for arrays:
// typedef struct arr_##name {
//   int size;
//   type *arr;
// } arr_##name;
//
// arr_##name alloc_arr_##name(int len) {
//   arr_##name a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
//   return a;
// }
//
//
void printMatrix(arr_arr_integer matrix) 
{

}

他们给我的一个线索是,列数和行数可以通过以下方式确定。

  int columns = matrix.arr->size; //No.columns
  int rows = matrix.size; //No.rows
  
  //Or

  int columns = matrix.arr[0].size; //No.columns
  int rows = matrix.size; //No.rows

我的问题在于其余的代码是如何编写的,以便之前的曲目可以工作?

也就是说,要让它在函数printMatrix中工作

您应该在代码中添加或修改哪些内容才能使上述方法起作用?

typedef struct arr_arr_integer {
   int size;
   type *arr;
} arr_arr_integer;

arr_arr_integer alloc_arr_arr_integer(int len) {
arr_arr_integer a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
   return a;
}

void printMatrix(arr_arr_integer matrix) 
{
   int columns = matrix.arr->size; //No.columns
   int rows = matrix.size; //No.rows
   
   //print matrix?
}

int main(int argc, char const *argv[])
{
   //input matrix?

   printMatrix(arr_arr_integer matrix)

   return 0;
}

我再说一遍。我必须严格使用这段代码

int columns = matrix.arr->size; //No.columns
int rows = matrix.size; //No.rows

问题是,当我尝试使用这些音轨时,出现以下编译错误。

error: request for member 'size' in something not a structure or union

【问题讨论】:

标签: arrays c struct


【解决方案1】:

函数alloc_arr_integer 分配一维整数数组。

如果您需要二维数组,则必须多次调用该函数。

类似:

arr_integer my2Darray[rows];

// Create the 2D array
for (int i = 0; i < rows; ++i)
{
    my2Darray[i] = alloc_arr_integer(columns);
    assert(my2Darray[i].arr != NULL);
}

// Initialize the 2D array
for (int i = 0; i < rows; ++i)
{
    for (int j = 0; j < columns; ++j)
    {
        my2Darray[i].arr[j] = i * 1000 + j;
    }
}

把它放在一起:

int main(void)
{
    int rows = 3;
    int columns = 5;
    
    arr_integer my2Darray[rows];

    // Create the 2D array
    for (int i = 0; i < rows; ++i)
    {
        my2Darray[i] = alloc_arr_integer(columns);
        assert(my2Darray[i].arr != NULL);
    }

    //Initialize the 2D array
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < columns; ++j)
        {
            my2Darray[i].arr[j] = (i + 1) * 1000 + j;
        }
    }

    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < columns; ++j)
        {
            printf("%d ", my2Darray[i].arr[j]);    
        }
        printf("\n");
    }

    return 0;
}

输出

1000 1001 1002 1003 1004 
2000 2001 2002 2003 2004 
3000 3001 3002 3003 3004 

【讨论】:

  • 谢谢,但我想知道matrix.arr-&gt; size 部分的工作原理。据说这些是要知道列数,但我不明白应该如何为这个matrix.arr-&gt; size 编写结构来工作
  • @A.m.Jacome 不清楚你在问什么。我在您的问题中没有看到任何 matrix 结构
  • 谢谢您的回答。我刚刚编辑了帖子。也许现在更清楚了。道歉。
【解决方案2】:

我假设“矩阵”的内存分配是在其他地方完成的。

void printMatrix(arr_arr_integer matrix) 
{
    int rows = matrix.size;
    int columns = matrix.arr.size;
    int i, j = 0;

    /*print array*/
    for (i = 0; i < rows; i++) 
    {
         for (j = 0; j < columns; j++)
             printf("%d ", a.arr[i].arr[j]);
         printf("\n");
    }
}

【讨论】:

    【解决方案3】:

    我正在练习代码信号,我编写了自己的函数来稳定数组。它们如下所示(尽管这可能有点太晚了)。

    typedef struct arr_integer
    {
        int size;
        int *arr;
    } arr_integer;
    
    typedef struct arr_arr_integer
    {
        int size;
        arr_integer *arr;
    } arr_arr_integer;
    
    arr_integer alloc_arr_integer(int size)
    {
        arr_integer *pointer;
        pointer = malloc(sizeof(arr_integer));
        pointer->size = size;
        pointer->arr = malloc(size * sizeof(int));
    
        return *pointer;
    }
    
    arr_arr_integer alloc_arr_arr_integer(int size)
    {
        arr_arr_integer *pointer;
        pointer = malloc(sizeof(arr_arr_integer));
        pointer->size = size;
        pointer->arr = malloc(size * sizeof(arr_integer));
        for (int i = 0; i < size; i++)
        {
            pointer->arr[i].arr = malloc(size * sizeof(int));
        }
    
        return *pointer;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2017-03-21
      • 1970-01-01
      • 2021-11-08
      • 2012-09-22
      • 2021-04-02
      • 2011-12-13
      • 2012-07-10
      • 2012-05-04
      相关资源
      最近更新 更多