最大N,只有1个数字不同的情况下答案错误

问题遇到的现象和发生背景

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1

用代码块功能插入代码,请勿粘贴截图
#include
int main(){
    int i,j,k,f=0,sum=1;
    int a[20],b[20],c[40]={0};
    scanf("%d",&a[0]);
    for(i=1;i<=a[0];i++){
        scanf("%d",&a[i]);}
    scanf("%d",&b[0]);
    for(i=1;i<=b[0];i++){
        scanf("%d",&b[i]);}
    
    
    for(i=1;i<=a[0];i++){
        f=0;
        for(j=1;j<=b[0];j++){
            if(a[i]==b[j]){f=1;}
        }
        if(f==0){c[sum]=a[i];sum++;}
    }
    
    for(j=1;j<=b[0];j++){
        f=0;
        for(i=1;i<=a[0];i++){
            if(a[i]==b[j]){f=1;}
        }
        if(f==0){c[sum]=b[j];sum++;}
    }
    sum=sum-1;
    
    
    for(i=1;ifor(j=i+1;j<=sum;j++){
           if(c[i]==c[j]){
               for(k=j;k<=sum;k++){
                   c[k]=c[k+1];
               }
               sum--;
           }
        }
    }
    printf("%d",c[1]);
    for(i=2;i<=sum;i++){printf(" %d",c[i]);}
}

运行结果及报错内容

最大N,只有1个数字不同的情况下答案错误
输入20 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
20 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3
输出20 3

我想要达到的结果

2 3

img


#include<stdio.h>
#define maxn 41
int main(void)
{
    int N1,N2;//N代表要输入的数字的总个数(N<=20)
    int a[maxn],b[maxn],c[maxn],dk=0,i,j,k=0;//数组a存储数字 
    scanf("%d",&N1);
    for(i=0;i<N1;i++)
    {
        scanf("%d",&a[i]);    
    }
    scanf("%d",&N2);
    for(i=0;i<N2;i++)
    {
        scanf("%d",&b[i]);    
    }
    //找出不是数组共有的元素,这次筛选可以重复 
    for(i=0;i<N1;i++)
    {
        for(j=0;j<N2;j++)
        {
            if(a[i]==b[j]) break;//一旦发现存在相同的,就跳出第二层循环
        }
        if(j==N2) c[k++]=a[i];//如果把第二层for循环遍历完全了,就说明在另一个数组中不存在该数值,就可以把该数值存到另一个数组中 
        
    }
        for(i=0;i<N2;i++)
    {
        for(j=0;j<N1;j++)
        {
            if(b[i]==a[j]) break; 
        }
        if(j==N1) {c[k++]=b[i];}
    }
    //printf("%d\n",k);
    //如何把相同的数字去掉呢
    printf("%d",c[0]);
    for(i=1;i<k;i++)
    {
        for(j=0;j<i;j++)
        {
            if(c[i]==c[j]) break;
        }
        if(j>=i) printf(" %d",c[i]);
     } 
    return 0;    
}
#include <stdio.h>
int inarr(int *arr,int n,int m)
{
    for(int i=0;i<n;i++)
        if(arr[i] == m)
            return 1;
    return 0;
}

int main () 
{ 
    int a[20],b[20],c[40];
    int an=0,bn=0;
    int i,j=0;
    scanf("%d",&an);
    for(i=0;i<an;i++)
        scanf("%d",&a[i]);
    scanf("%d",&bn);
    for(i=0;i<bn;i++)
        scanf("%d",&b[i]);
    //
    for(i=0;i<an;i++)
        if(!inarr(b,bn,a[i]) && !inarr(c,j,a[i]))
            c[j++] = a[i];
    for(i=0;i<bn;i++)
        if(!inarr(a,an,b[i]) && !inarr(c,j,b[i]))
            c[j++] = b[i];
    for(i=0;i<j;i++)
    {
        if(i==0)
            printf("%d",c[i]);
        else
            printf(" %d",c[i]);
    }
    return 0; 
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632