用c中的多维数组匹配数字



我怎么能写一个函数,它检查Nums:{1, 2, 3} {4, 5, 6} {1, 5, 9}的任何行是否在Val1-6内有效。例如,在包含{5, 9, 1}Val2中,包含{1, 5, 9}Nums的第三行中的元素。Val6也是有效的,因为数字1, 2, 3也在Nums的第一行中。唯一不应该传递给函数的值应该是Val 3-5,因为这些数组不包含Nums中每行的所有元素。对于Val数组传递为true,它必须包含Nums中单行内的所有3个数字。下面的函数是错误的,我怎么能把它修复成预期的工作

功能:

int match_arrays(int *arr1, int *arr2, int len) {
for (int p = 0; p < len; p++) {
if (arr1[p] != arr2[p]) {
return 0;
}
}
return 1;
}

主要功能
int main()
{
int Val1[3] = {1, 5, 9};
int Val2[3] = {5, 9, 1};
int Val3[2] = {1, 2}
int Val4[3] = {4, 5, 4};
int Val5[3] = {4, 4, 4};
int Val6[5] = {1, 2, 4, 5, 3};
int count;
int Nums[3][3] = {{1, 2, 3}, {4, 5, 6}, {1, 5, 9}}
for (int p = 0; p < 3; p++) {
if (match_arrays(Val1, Nums[p], 3)) {
printf("Val1 valid n");
}
else if (match_arrays(Val2, Nums[p], 3)) {
printf("Val2 valid n");
}
else if (match_arrays(Val3, Nums[p], 2)) {
printf("Val3 valid n");
}
else if (match_arrays(Val4, Nums[p], 3)) {
printf("Val4 valid n");
}
else if (match_arrays(Val5, Nums[p], 3)) {
printf("Val5 valid n");
}
else if (match_arrays(Val6, Nums[p], 5)) {
printf("Val6 valid n");
}
}
return 0;
}

预期输出:

Val1 valid
Val2 valid
Val6 valid

目前,您的match_arrays()函数将Nums[p]的第一个元素与ValX的第一个元素进行比较,以此类推。但这并没有考虑到它们的顺序是否不同。所以要检查Nums[p]中的每个值是否存在于ValX中的某个地方,你需要嵌套循环。

同样,match_arrays()需要两个大小——一个用于Nums[p],一个用于ValX。我猜你可以硬编码Nums的大小[p],因为它是相同的每一行Nums -但如果不是呢?

我会这样写:

#include <stdio.h>
int contains(int *Val, int ValSize, int Num)
{
int ReturnValue = 0;
// Check if Val contains Num
for (int p = 0; p < ValSize; p++)
if (Val[p] == Num)
ReturnValue = 1;
// Return whether Val contained Num
return ReturnValue;
}
int match_arrays(int *Val, int ValSize, int *NumsRow, int NumsRowSize)
{
int ReturnValue = 0;
// Check if Val contains all the elements of NumsRow
for (int p = 0; p < NumsRowSize; p++)
if (contains(Val, ValSize, NumsRow[p]))
ReturnValue++;
// Return whether Val contained all the elements of NumsRow
return (ReturnValue==NumsRowSize);
}
int main()
{
int Val1[3] = {1, 5, 9};
int Val2[3] = {5, 9, 1};
int Val3[2] = {1, 2};
int Val4[3] = {4, 5, 4};
int Val5[3] = {4, 4, 4};
int Val6[5] = {1, 2, 4, 5, 3};
int Nums[3][3] = {{1, 2, 3}, {4, 5, 6}, {1, 5, 9}};
for (int p = 0; p < 3; p++) {
if (match_arrays(Val1, /* elements of Val1 = */ 3, Nums[p], /* elements of Nums[p] = */ 3)) {
printf("Val1 valid at Num[%d] n", p);
}
if (match_arrays(Val2, 3, Nums[p], 3)) {
printf("Val2 valid at Num[%d] n", p);
}
if (match_arrays(Val3, 2, Nums[p], 3)) {
printf("Val3 valid at Num[%d] n", p);
}
if (match_arrays(Val4, 3, Nums[p], 3)) {
printf("Val4 valid at Num[%d] n", p);
}
if (match_arrays(Val5, 3, Nums[p], 3)) {
printf("Val5 valid at Num[%d] n", p);
}
if (match_arrays(Val6, 5, Nums[p], 5)) {
printf("Val6 valid at Num[%d] n", p);
}
}
return 0;
}

试试:https://onlinegdb.com/wtPcHTk2Z

最新更新