Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在二维数组中查找数字的位置_C_Arrays_Multidimensional Array - Fatal编程技术网

C 在二维数组中查找数字的位置

C 在二维数组中查找数字的位置,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我有两个数组。数组A和数组B。现在我需要得到数组B中数组A的序列的位置。我需要知道最后一个号码的位置,但我不知道怎么知道 A[4]={6,3,3,2}; B[10][18]={ {5,3,6,5,6,1,6,1,4,4,5,4,4,6,3,3,1,3}, {6,2,3,6,3,3,2,4,3,1,5,5,3,4,4,1,6,5}, {6,4,3,1,6,2,2,5,3,4,3,2,6,4,5,5,1,4}, {5,3,5,6,6,4,3,2,6,5,1,2,5,6,5,2,3,1}, {1,2

我有两个数组。数组A和数组B。现在我需要得到数组B中数组A的序列的位置。我需要知道最后一个号码的位置,但我不知道怎么知道

A[4]={6,3,3,2};

B[10][18]={
{5,3,6,5,6,1,6,1,4,4,5,4,4,6,3,3,1,3},
{6,2,3,6,3,3,2,4,3,1,5,5,3,4,4,1,6,5},
{6,4,3,1,6,2,2,5,3,4,3,2,6,4,5,5,1,4},
{5,3,5,6,6,4,3,2,6,5,1,2,5,6,5,2,3,1},
{1,2,5,2,6,3,1,5,4,6,4,4,4,2,2,2,3,3},
{4,1,4,2,3,2,3,6,4,1,6,2,3,4,4,1,1,4},
{5,3,3,2,6,2,5,2,3,1,2,6,5,1,6,4,1,3},
{4,5,2,1,2,5,2,6,4,3,3,2,3,3,3,1,5,1},
{1,3,5,5,2,1,3,3,3,1,3,3,6,3,3,3,6,5},
{4,5,2,4,2,3,4,2,5,6,5,2,6,3,5,4,5,2}
};
例如:序列6,3,3,2从第二行和第四列开始,到第七列结束。我需要知道2号的位置。我的结果应该是: 行=2, 列=7

序列并不总是在行中。它可以在列中。例如: 3,2,4,3,我想知道4号的位置

我知道如何在一维数组中搜索一个数字,但在这种情况下,我没有解决方案


语言是C。

问题不在于语言。你面临的问题是你需要先拿出算法

实际上,只需查看1D阵列的第一个数字,就可以轻松完成此操作。在您的示例中,它是(6,3,3,2)中的6

  • 在2D数组中查找6
  • 一旦找到6,使用循环4次的循环(因为有4个数字要查找-(6,3,3,2))
  • 在循环中,检查后续数字是否为3,3,2
  • 如果是,请返回位置
  • 否则继续此过程以查找6
  • 完成了
  • 它将如下所示:

    for(x=0; x<rows; x++)
        for(y=0; y<cols; y++)
        {
            if(matrix[x][y] == array1D[0])
                for(z=1; z<array1DSize; z++){
                    if(matrix[x][y] != array1D[z])
                        break;
                    location = y;
                }
        }
    

    for(x=0;x如果你知道如何使用一维数组,你也可以使用多维数组在C中这样做

    例如,假设您有一个二维数组,如下所示:

    int array[5][5]; // 5x5 array of ints
    
    实际上,您可以通过执行以下操作以线性方式访问它:

    (*array)[linear offset]
    
    这意味着如果您想访问第二行的第二列,可以执行以下操作:

    (*array)[6]
    
    因为第二行从索引5开始,第二列在索引1,所以你可以(5+1)得到6。同样,第三行从索引10开始,所以如果你想要第三行的第二列,你可以(10+1)


    知道了这一点,您可以使用原始算法并对其进行调整,以线性方式访问多维数组。这也取代了“环绕”的可能性。

    您可以使用
    memcmp
    比较块:

    for (i = 0; i < rows; i++) { /* For each row */ 
        for (j = 0; j < cols - size; j++) { /* For each col until cols - 4 */
            if (memcmp(A, &B[i][j], sizeof(A)) == 0) { /* Compare entire block */
    
    for(i=0;i

    #包括
    #包括
    内部主(空)
    {
    int A[4]={6,3,3,2};
    int B[10][18]={
    {5,3,6,5,6,1,6,1,4,4,5,4,4,6,3,3,1,3},
    {6,2,3,6,3,3,2,4,3,1,5,5,3,4,4,1,6,5},
    {6,4,3,1,6,2,2,5,3,4,3,2,6,4,5,5,1,4},
    {5,3,5,6,6,4,3,2,6,5,1,2,5,6,5,2,3,1},
    {1,2,5,2,6,3,1,5,4,6,4,4,4,2,2,2,3,3},
    {4,1,4,2,3,2,3,6,4,1,6,2,3,4,4,1,1,4},
    {5,3,3,2,6,2,5,2,3,1,2,6,5,1,6,4,1,3},
    {4,5,2,1,2,5,2,6,4,3,3,2,3,3,3,1,5,1},
    {1,3,5,5,2,1,3,3,3,1,3,3,6,3,3,3,6,5},
    {4,5,2,4,2,3,4,2,5,6,5,2,6,3,5,4,5,2}
    };
    尺寸i,j,尺寸,行,列;
    int=0;
    尺寸=尺寸(A)/尺寸(A[0]);
    行数=sizeof(B)/sizeof(B[0]);
    cols=sizeof(B[0])/sizeof(B[0][0]);
    对于(i=0;i
    如果序列是
    3,1,3,6,2
    ,哪些是第一行的最后3个数字,哪些是第二行的前2个数字呢?如果我刚才问的问题的答案是
    row=2,col=2
    ,那么我向您推荐一种适合您的问题的算法:这种情况不会发生。但是感谢链接。它可能是b不管怎样,使用这段代码,我得到了一些奇怪的结果。位置的值是:1996647070@arozma您需要确保在循环外部声明变量
    location
    。行可以正常工作。但如果我在列中写入数字,我总是得到行:1,列:18。
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        int A[4] = {6,3,3,2};
        int B[10][18] = {
            {5,3,6,5,6,1,6,1,4,4,5,4,4,6,3,3,1,3},
            {6,2,3,6,3,3,2,4,3,1,5,5,3,4,4,1,6,5},
            {6,4,3,1,6,2,2,5,3,4,3,2,6,4,5,5,1,4},
            {5,3,5,6,6,4,3,2,6,5,1,2,5,6,5,2,3,1},
            {1,2,5,2,6,3,1,5,4,6,4,4,4,2,2,2,3,3},
            {4,1,4,2,3,2,3,6,4,1,6,2,3,4,4,1,1,4},
            {5,3,3,2,6,2,5,2,3,1,2,6,5,1,6,4,1,3},
            {4,5,2,1,2,5,2,6,4,3,3,2,3,3,3,1,5,1},
            {1,3,5,5,2,1,3,3,3,1,3,3,6,3,3,3,6,5},
            {4,5,2,4,2,3,4,2,5,6,5,2,6,3,5,4,5,2}
        };
        size_t i, j, size, rows, cols;
        int founded = 0;
    
        size = sizeof(A) / sizeof(A[0]);    
        rows = sizeof(B) / sizeof(B[0]);
        cols = sizeof(B[0]) / sizeof(B[0][0]);
        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols - size; j++) {
                if (memcmp(A, &B[i][j], sizeof(A)) == 0) {
                    founded = 1;
                    break;
                }
            }
            if (founded) break;
        }
        if (founded) printf("Row: %zu Col: %zu\n", i + 1, j + size);
        return 0;
    }