我试图解决这个问题:给定一个数字 N 和两个包含 N 个元素的 A、B 数组,确定 B 是否包含与 A 相同的元素(不一定位于相同位置)。
将有三个输入:
第一行包含 N 个元素
第二行包含数组A的N个元素
第三行包含数组 B 的 N 个元素
示例:
输入:
4
4 2 3 7
2 3 4 9
输出:
no
输入:
5
5 1 1 9 3
1 9 1 5 3
输出:
yes
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d", &n);
long int a[n], b[n];
for (int i = 0; i < n; i++)
{
scanf("%ld", &a[i]);
}
for (int i = 0; i < n; i++)
{
scanf("%ld", &b[i]);
}
int same;
for (int j = 0; j < n; j++)
{
same = 0;
for (int k = 0; k < n; k++)
{
if (a[j] == b[k])
{
same = 1;
}
}
if (same == 0)
{
break;
}
}
if (same == 0)
{
printf("no\n");
}
else
{
printf("yes\n");
}
return 0;
}
我的代码将获取数组 A 的第一个元素并将其与数组 B 的所有元素进行比较,然后获取 A 的后续元素并执行相同的操作。这种方法可以成功地为前 3 个测试用例提供正确的输出(问题中仅显示了 2 个),但它在测试 4 上显示了错误的答案,我不知道为什么,因为未显示该测试用例的输入。所以,请帮我找出代码中的问题。
如果数组具有相同的数字但数量不同,则您的方法不起作用:例如:
1 1 2
和 1 2 2
将产生 yes
,即使数组并不严格包含不同顺序的相同数字。
更可靠的方法是复制两个数组,对它们进行排序并比较排序后的数组。