📜  门| GATE-CS-2007 |第 40 题(1)

📅  最后修改于: 2023-12-03 15:28:43.142000             🧑  作者: Mango

门| GATE-CS-2007 |第 40 题

本题为 GATE-CS-2007(CS题库中的国际计算机专业资格考试)的第 40 题,题目如下:

以下是一个函数,该函数的任务是在一个二维数组中找到一个给定值的位置并返回它所在的行和列的下标。如果给定值不在数组中,则返回-1.

int find(int **a, int n, int value)
{
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            if(a[i][j] == value)
            {
                return i*1000+j;
            }
        }
    }
    return -1;
}

详细解析:

本题是一个算法题,要求编写一个函数,该函数可以在一个二维数组中查找给定值的位置,并返回它所在的行和列的下标。

函数名为 find,有三个参数,其中第一个参数 a 是一个指向指针的指针,表示一个二维数组;第二个参数 n 表示该数组的维度,为正整数;第三个参数 value 为需要在数组中查找的给定值,为整数。

该函数的实现方法是利用两个循环嵌套遍历整个数组,查找给定值,如果找到,则返回该值所在的行和列的下标(用行号乘以 1000 加上列号的方式表示)。如果在数组中未找到该值,则返回 -1。

其中,关键是要理解“二维数组被看做一个指向指针的指针”的概念,即 a 表示一个指向指针的指针,指向的每个指针分别表示一个长度为 n 的一维数组。因此,a[i] 表示第 i 行的地址,a[i][j] 表示第 i 行第 j 列的元素。

代码片段如下(markdown格式):

```c++
int find(int **a, int n, int value)
{
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            if(a[i][j] == value)
            {
                return i*1000+j;
            }
        }
    }
    return -1;
}