比较两个未排序的int数组的代码。C
我需要创建一个代码来比较数组中的两个,而不进行排序。它们必须具有相同的长度,并且以任何顺序包含相同的元素比较两个未排序的int数组的代码。C,c,arrays,integer,return,compare,C,Arrays,Integer,Return,Compare,我需要创建一个代码来比较数组中的两个,而不进行排序。它们必须具有相同的长度,并且以任何顺序包含相同的元素 a[]中的每个整数也在b[]中 b[]中的每个整数也在a[]中 所有这些公共值看起来完全相同 a[]和b[]中的次数 示例: a={1,2,3},b={2,3,4}返回0 a={1,2,3};b={2,3,1}返回1 a={1,2,2};b={2,2,1}返回1 a={1,2,2};b={2,1,1}返回0 a={1,1,2,2,2};b={2,1,2,1,2}返回1 我只是不知道该
- a[]中的每个整数也在b[]中
- b[]中的每个整数也在a[]中
- 所有这些公共值看起来完全相同 a[]和b[]中的次数
- a={1,2,3},b={2,3,4}返回0
- a={1,2,3};b={2,3,1}返回1
- a={1,2,2};b={2,2,1}返回1
- a={1,2,2};b={2,1,1}返回0
- a={1,1,2,2,2};b={2,1,2,1,2}返回1
我只是不知道该怎么做…如果数组没有排序,你将得到一个二次算法。您可以在算法开始时检查数组长度,如果它们相等,比如N,您可以这样做
int result = 1;
for (int j=0;j<N;j++) {
bool found = false;
for (int i=0;i<N && !found;i++) {
if (a[j] == b[i]) found = true;
}
if (!found) return 0;
}
int结果=1;
对于(intj=0;j我拿走了一段时间,并在一分钟内得到了它:D
int相同内容(int a[],int b[],int n){
int maxA=0,maxB=0,计数器A=0,计数器B=0;
int i,k,j,x;
对于(i=0;imaxA)maxA=a[i];
对于(i=0;imaxB)maxB=b[i];
如果(maxA!=maxB)返回0;
对于(j=0;j您可以试试这个!
#include<stdio.h>
int check_same_array(int a[], int b[],int lenA,int lenB)
{
int result = 0;
bool flag = false;
int i = 0,j=0;
if (lenA != lenB)
return 0;
for (i = 0; i < lenA; i++)
{
flag = false;
for (j = 0; j < lenB; j++)
{
if (a[i] == b[j])
flag = true;
}
if (!flag)
{
result = 0;
break;
}
}
if (flag)
result = 1;
return result;
}
int main()
{
int a[5] = { 2, 2, 3, 3 ,5};
int b[5] = { 3, 3, 2, 2 ,5};
int lenA = sizeof(a) / sizeof(int);
int lenB = sizeof(b) / sizeof(int);
printf("%d\n", check_same_array(a, b, lenA, lenB) && check_same_array(b, a, lenB, lenA));
return 0;
}
#包括
int check_same_数组(int a[],int b[],int lenA,int lenB)
{
int结果=0;
布尔标志=假;
int i=0,j=0;
如果(lenA!=lenB)
返回0;
对于(i=0;i
check\u same\u数组
用于检查数组A中的每个项目是否在数组B中。
因此,如果数组A中的每个项都在数组B中,而数组B中的每个项都在数组A中。
这两个数组的项是相同的。您可能认为您需要为此做些什么?我不知道如何攻击这一项。如果允许我对数组进行排序,这将在几分钟内完成…但我只需要在实现方面得到帮助…您可以使用辅助存储吗?(如果允许,是否有限制?)您是否可以以任何方式重新排列a
和b
中的元素?a
和b
中的值是否任意或限制在某个范围内?我不允许重新排列任何内容,我们可以使用辅助存储。a和b中的值限制在所有无法正确返回0的位置号上{1,2,2};{2,1,1}
试着用{1,2,2,3}
和{1,1,2,3}
(甚至用{1,3}
和{2,3}
)。使用j
的循环有什么意义?j
没有在任何地方使用。很抱歉,您必须减少maxA和maxB。如果集合具有限制值,则增加maxA和maxB只能在合理的时间内工作。否则,将{11000000000}与{2100000000}进行比较如果这些值被限制为小的正整数,有一个非常漂亮的算法,它在集合的大小上是线性的,但是我没有提供它,因为给定的约束是集合被限制为“所有正数”。这不能正确处理重复元素,例如,它比较{1,1,2}和{1,2,2}相等。让我考虑一下这一点。
#include<stdio.h>
int check_same_array(int a[], int b[],int lenA,int lenB)
{
int result = 0;
bool flag = false;
int i = 0,j=0;
if (lenA != lenB)
return 0;
for (i = 0; i < lenA; i++)
{
flag = false;
for (j = 0; j < lenB; j++)
{
if (a[i] == b[j])
flag = true;
}
if (!flag)
{
result = 0;
break;
}
}
if (flag)
result = 1;
return result;
}
int main()
{
int a[5] = { 2, 2, 3, 3 ,5};
int b[5] = { 3, 3, 2, 2 ,5};
int lenA = sizeof(a) / sizeof(int);
int lenB = sizeof(b) / sizeof(int);
printf("%d\n", check_same_array(a, b, lenA, lenB) && check_same_array(b, a, lenB, lenA));
return 0;
}