Разница множеств
Дано два массива целых чисел ? и ?. Требуется найти все такие значения элементов массива ?, которых нет среди элементов массива ?. В первой строке записано целое число ? (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 шт):
Гм... если я верно понял, то
#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("");
}
Нет?