Разница множеств

Дано два массива целых чисел ? и ?. Требуется найти все такие значения элементов массива ?, которых нет среди элементов массива ?. В первой строке записано целое число ? (1 <= ? <= 10^5) — количество элементов массива ?. Во второй строке через пробел записано ? неотрицательных целых чисел, каждое из которых не превосходит 10^5 — элементы массива ?. В следующих двух строках в аналогичном формате записаны элементы массива ?. В первой строке выведите одно целое число — количество значений, удовлетворяющих описанному условию. Во второй строке выведите все такие значения в порядке возрастания. Вот мой код, но он выводит все совершенно противоположно тому, что нужно. Подскажите, что тут можно сделать или исправить, умоляю:

#include<stdio.h>
int main(){
    int N1, N2, i, j, k;
    k=0;
    int A[100000];
    int B[100000];
    scanf("%d", &N1);
    for(i=0; i<N1; i++){
        scanf("%d", &A[i]);
    }
    scanf("%d", &N2);
    for(j=0; j<N2; j++){
        scanf("%d", &B[i]);
    }
    for(i=0; i<N1; i++){
        for(j=0; j<N2; j++){
            if (A[i]!=B[j]){
              k++;
              printf("%d\n", A[j]);
            }
        }
    }
    printf("%d", k);
}

Ответы (1 шт):

Автор решения: Harry

Гм... если я верно понял, то

#include<stdio.h>
int main()
{
    int N;
    int A[100001] = {0};  // В этот массив пишем 1 в A[i], если читаем i
    // Числа не превосходят 10^5, так что этого массива хватит

    scanf("%d", &N);

    for (int i = 0, k; i < N; i++)
    {
        scanf("%d", &k);
        A[k] = 1;
    }

    scanf("%d", &N);  // Размер массива B
    for (int i = 0, k; i < N; i++)
    {
        scanf("%d", &k);
        A[k] = 0;  // Вычеркиваем из A все элементы, которые есть в B
    }

    // Ищем количество оставшихся в А элементов
    N = 0;
    for (int i = 0; i <= 100000; i++)
        N += A[i];
    printf("%d\n", N);

    // Выводим элементы в порядке возрастания...    
    for (int i = 0; i <= 100000; i++)
        if (A[i]) printf("%d ", i);

    puts("");
}

Нет?

→ Ссылка