C 在二维数组中查找数字的位置
我有两个数组。数组A和数组B。现在我需要得到数组B中数组A的序列的位置。我需要知道最后一个号码的位置,但我不知道怎么知道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[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
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;
}