从两个数组中查找公共值

时间:2014-06-02 08:50:20

标签: c arrays

我正在尝试编写一个程序来检查两个不同大小的数组中的值,并将公共元素添加到第三个数组中。

我使用以下代码:

#include <stdio.h>

int main(void) {
    // your code goes here

    int A[5], B[8], i, j, s=1;
    int* c;
    c=(int*)malloc(s*sizeof(int));

    for(i=0;i<5;i++) 
    {scanf("\t %d", &A[i]);}

    printf("\n");

    for(j=0;j=8;j++) 
    {scanf("\t %d", &B[j]);}

    for(i=0, j=0;i<5,j<8;i++,j++)
    {

        if(A[i]==B[j])
            {
            c[i]=A[i];
            s++;
            printf("\n %d", c[i]);
            c=realloc(c, s*sizeof(int));
            break;
            }

    }

    return 0;
}

但是当我尝试执行它时,它会给出时间限制已超过的问题。是什么导致了这个问题?对于编译,我使用的是在线编译器ideone

2 个答案:

答案 0 :(得分:1)

以下是可行的代码。

除了for循环中提到的问题之外,对数组c的赋值是错误的。

#include <stdlib.h>
#include <stdio.h>

int main(void) {
    int A[5], B[8], i, j, s=1;
    int* c;
    c=(int*)malloc(s*sizeof(int));

    for(i=0;i<5;i++) {scanf("\t %d", &A[i]);}
    printf("\n");

    for(j=0;j<8;j++) {scanf("\t %d", &B[j]);}

    for(i=0;i<5;i++){
        for(j=0;j<8;j++){
                if(A[i]==B[j]){
                    c[s-1] = A[i];  // use s-1 as an index
                    printf("\n %d", c[s-1]);
                    s++;
                    c=(int*)realloc(c, s*sizeof(int));
                }
            }
    }
    return 0;
}

答案 1 :(得分:0)

嗯......从哪里开始? 你只是在寻找相同且位置相同的角色吗?它看起来就像你正在尝试做的那样,但是由于阵列A和B具有不同的尺寸,你将遇到一些麻烦。你只是在寻找第一场比赛吗?随着“休息”,你将在第一场比赛后停止。 假设您正在寻找两个列表共有的所有元素 - 在任何位置 - 您将需要更像以下代码:

#include <stdio.h>

int main(void)
{
    int A[5], B[8], C[8];

    for (int i = 0; i < 5; i++) 
        scanf(" %d ", &A[i]);

    printf("\n");

    for (int i = 0; i < 8; i++) 
        scanf(" %d ", &B[i]);

    int ci = 0;
    for (int ai = 0; ai < 5; ai++)
    {
        for (int bi = 0; bi < 8; bi++)
        {
            if (A[ai] == B[bi])
            {
                C[ci] = A[ai];
                ci++;
                break;
            }
        }
    }

    C[ci] = 0;
    printf("Common chars: %s\n", C);

    return 0;
}

我认为,你想要的关键是嵌套的for循环,它分别遍历每个字符串(A和B),同时寻找匹配的字符。