CodeSignal问题。我想完成代码

时间:2020-09-07 00:21:51

标签: arrays c struct

我有以下问题。函数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

2 个答案:

答案 0 :(得分:0)

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

如果需要2D数组,则必须多次调用该函数。

类似的东西:

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 

答案 1 :(得分:0)

<块引用>

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

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");
    }
}