Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
比较两个未排序的int数组的代码。C_C_Arrays_Integer_Return_Compare - Fatal编程技术网

比较两个未排序的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;
}